a***@163.com
a***@163.com
  • 发布:2019-06-11 11:27
  • 更新:2020-10-29 13:59
  • 阅读:36916

uni.uploadFile使用files上传问题

分类:uni-app

app端使用files上传多张文件时 提示uploadFile:fail undefined is not an object (evaluating 'e.indexOf') 错误
获取图片代码

 uni.chooseImage({  
        sizeType: ["compressed"],  
        success: res => {  
          for (let i = 0; i < res.tempFiles.length; i++) {  
           let obj = new Object();  
          obj.name = "img";  
          obj.url = res.tempFiles[i].path;  
          this.img.push(obj);  
           console.log(obj);  
           obj = null;  
          }

this.img打印数据


上传部分代码

 uni.uploadFile({  
          url: this.baseUrl + "/forum/publish_article",  
          fileType: "image",  
          files: this.img,  
          formData: {  
            title: this.title,  
            content: this.text,  
            forum_id: this.id,  
            forum_type: this.type  
          },
2019-06-11 11:27 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

大家注意 files 参数 里面

var filelist = [];
for(var i = 0 ; i < self.src.length ; i ++){
var obj = {};
obj.name = "images" + i;
obj.uri = self.src[i];
// filelist.push({name:'afile='+i,uri:self.src[i]})
filelist.push(obj)
}

中的 是 uri 不是url

顶我上去 让更多的朋友看到

2***@qq.com

2***@qq.com

var filelist = [];
for(var i = 0 ; i < self.src.length ; i ++){
var obj = {};
obj.name = "images" + i;
obj.uri = self.src[i];
// filelist.push({name:'afile='+i,uri:self.src[i]})
filelist.push(obj)
}

            uni.uploadFile({  
                url: 'http://192.168.1.100:8036/verify/imgs_upload',  
                fileType:'image',  
                files:filelist,  
                filePath:'',  
                sizeType: ['compressed'],  
                name:'',  
                header: {"Content-Type": "multipart/form-data"},  
                fail:()=>{  
                    uni.showToast({  
                        title: '请求错误',  
                        duration: 2000  
                    });  
                },  

后端用MultipartRequest可以取到多个,终于解决了!

DCloud_UNI_GSQ

DCloud_UNI_GSQ

调用uni.uploadFile之前打印一下this.img看看,this.img可能有问题

  • a***@163.com (作者)

    中间那张截图就是this.img打印出来的数据

    2019-06-12 10:15

  • DCloud_UNI_GSQ

    回复 a***@163.com: 那张截图不是app端

    2019-06-12 10:46

  • a***@163.com (作者)

    回复 DCloud_UNI_GSQ: 数据是一样的。。 app端打印不出来数据

    2019-06-12 11:31

  • a***@163.com (作者)

    {

    "name": "img",

    "url": "_doc/uniapp_temp_1560310150437/compressed/1560310309280.JPG"

    }

    这是使用ios模拟器 在hbuilder上打印出来的obj数据

    2019-06-12 11:33

  • a***@163.com (作者)

    this.img为数组 数组中包含多个上方的obj数据

    2019-06-12 11:34

  • DCloud_UNI_GSQ

    你打错字母了,uri不是url

    2019-06-12 11:46

  • a***@163.com (作者)

    回复 DCloud_UNI_GSQ: 打扰了。。。

    2019-06-12 13:01

  • a***@163.com (作者)

    回复 DCloud_UNI_GSQ: 请问一下使用这个api报uploadFile:fail 是哪块出问题了

    2019-06-12 14:30

  • DCloud_UNI_GSQ

    回复 a***@163.com: 还是app端吗?单个上传试试呢

    2019-06-12 15:48

  • a***@163.com (作者)

    回复 DCloud_UNI_GSQ: 还是一样 {"uri":"_doc/uniapp_temp_1560326030863/compressed/1560326172333.JPG","name":"front"} 这是数据格式 name是后台接收的字段名

    2019-06-12 15:57

  • a***@163.com (作者)

    回复 DCloud_UNI_GSQ: 使用uni.chooseImage获取到的图片信息 这个tempFiles里的好像不是file对象啊 只是个普通的对象吧

    2019-06-12 16:00

  • 9***@qq.com

    回复 DCloud_UNI_GSQ: _doc/uniapp_temp_1564123463064/compressed/1564123490421.JPG 这个路径传给后台,后台显示不出来怎么办

    2019-07-26 15:20

  • 谭小谭

    回复 DCloud_UNI_GSQ: 我不传图片,会报TypeError: Cannot read property 'indexOf' of undefined,因为业务中,图片不是必选的,用户可以传图片也可以不传图片,传单图多图都不会报错,但是不传就会报错

    2021-09-29 11:33

小资电脑

小资电脑

上传一个呢?

  • a***@163.com (作者)

    使用filePath上传是没问题的 但是只能上传一张

    2019-06-12 10:12

  • a***@163.com (作者)

    使用files上传单张也是同样的问题

    2019-06-12 10:17

7***@qq.com

7***@qq.com

楼主问题解决了么

1***@qq.com

1***@qq.com - 菜鸟

async submit(){
console.log(this.imageList)
let imgs = this.imageList.map((value, index) => {
return {
name: "image" + index,
uri: value
}
})
uni.uploadFile({

                    url: 'http://47.94.243.54:8880/pub/pub/classCircle/addClassCircle', //仅为示例,非  
                    fileType: "image",  
                    // filePath:this.imageList[0],  
                    //name:"file",  
                    files:imgs,  
                    header:{  
                        'token':uni.getStorageSync('token'),  

                    },  
                    formData: {  
                        classId:this.classid,  
                        description:this.text  
                    },  
                    success: (uploadFileRes) => {  
                    uni.showToast({  
                        title:'上传成功',  

                    })  
                楼主我的报[system] uploadFile:fail Missing required parameter `filePath`这个错该怎么弄啊   不是传多张不用传filePath这个的么 
  • DCloud_UNI_GSQ

    看清楚文档,仅app端支持

    2019-06-20 19:05

  • 心脏

    回复 DCloud_UNI_GSQ: 我的就是APP 自定义基座运行的 在手机上传没法上传 报的就是这个错

    2020-01-22 11:36

a***@gmail.com

a***@gmail.com - web

getImage(){
let that = this
uni.chooseImage({
count: 6 - this.imageslist.length,
success:(res) => {

                    this.imageslist = this.imageslist.concat(res.tempFilePaths);  
                    let imgs = [];  
                    let images = this.imageslist  
                    images.filter((item, index) => {  
                        imgs.unshift({  
                            "name": "image"+index,  
                            "url": item  
                        })  
                    });  
                uni.uploadFile({  
                        url: ''',   
                        files: imgs,  
                        header: {"Content-Type": "multipart/form-data"},  
                        success: (uploadFileRes) => {  
                            // this.url.push(JSON.parse(uploadFileRes.data).data.file_path);  
                            console.log(this.url)  
                            console.log(uploadFileRes.data)  
                       }  
              });  
          }  
        });  

},
实现多图片上传 报错 => 安卓

hbuilderx =>{
uploadFile:fail undefined is not an object (evaluating 'e.indexOf')
}
有大佬解决吗

  • a***@163.com (作者)

    imgs接收的参数是uri 不是url 和我一样的问题

    2019-07-03 10:11

5***@qq.com

5***@qq.com

报uploadFile:fail 这个问题你解决了么?多文件上传 有的手机可以成功,有的报uploadFile:fail

  • a***@163.com (作者)

    这个忘了怎么解决的了

    2019-07-04 09:29

9***@qq.com

9***@qq.com

_doc/uniapp_temp_1564123463064/compressed/1564123490421.JPG 这个路径传给后台,后台找不到图片,是怎么解决

甜心杰

甜心杰 - 90小清新

为什么只能上传一个?

for (let item of this.tempFilePaths) {  
                    let obj = new Object();  
                    obj.name = "file";  
                    obj.uri = item;  
                    imgList.push(obj)  

                }  

uni.uploadFile({  

                    url: ConfigUrl + '/notice/upNoticeDoc',  
                    method: "POST",  
                    header: {  
                        "Authorization": token  
                    },  
                    files: imgList, // 多文件  
                    // filePath: that.tempFilePaths, //单文件  
                    // name: 'file', //   
                    formData: {  
                        'noticeId': 'eaf6e73e-e272-43f6-a161-ef98e0e79667'  
                    },  
                    success: (uploadFileRes) => {  
                        console.log(uploadFileRes);  
                        this.tempFilePaths = [];  
                        uni.showToast({  
                            icon: "none",  
                            title: '上传成功',  
                            duration: 2000  
                        });  
                    },
  • a***@163.com (作者)

    所有img的name相同 只上传了最后一个

    2019-08-19 17:12

  • a***@163.com (作者)

    每张图片的name都需要对应一个接口的字段 例如10张图需要上传 后端就要提供10个字段 你的图片name需要一一对应才能上传成功10张图

    2019-08-19 17:14

  • y***@163.com

    回复 a***@163.com: h5 可以不用传name 而且搞那么多字段也不行啊

    2020-09-02 17:44

7***@qq.com

7***@qq.com

楼主,files多文件上传,后台怎么拿到上传的files数组呢

  • 1***@qq.com

    直接在它 的回调函数中拿到,好像要转一下格式

    2019-10-15 16:46

小孩子才选

小孩子才选

submit(){
let arr=this.imgList.map((val,index)=>{
return{
name:'image'+index,
uri:val
}
})
console.log(arr)
uni.uploadFile({
url:'http://localhost:8000/article/report',
method: "POST",
files: arr, // 多文件
complete:(res)=>{
console.log(res)
}
})
},
一直报这个[system] uploadFile:fail Missing required parameter filePath 怎么回事啊???

  • 1***@qq.com

    仔细阅读一下文档就知道

    2019-11-08 16:17

  • 1***@qq.com

    这个只能在真机上才可以

    2019-11-08 16:19

  • 心脏

    回复 1***@qq.com: 可是我在真机上也报这个错误 怎么办

    2020-01-22 11:35

店小二丶

店小二丶 - 江湖小二

我通过files上传图片H5调试可以成功,但是APP上不可以报错这个问题,请问哪里出错了

该问题目前已经被锁定, 无法添加新回复