yancheng909
yancheng909
  • 发布:2022-04-28 16:48
  • 更新:2022-04-29 10:10
  • 阅读:895

【报Bug】'content-type': 'multipart/form-data' 增加后端无法接收文件

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.4.7

浏览器平台: Chrome

浏览器版本: 100.0.4896.127

项目创建方式: HBuilderX

操作步骤:

'content-type': 'multipart/form-data'

预期结果:

'content-type': 'multipart/form-data'

实际结果:

'content-type': 'multipart/form-data'

bug描述:

uni.uploadFile H5 上传增加表单头 multipart/form-data 会导致后端接收不到文件 不添加表单头 苹果ios无法上传文件??

2022-04-28 16:48 负责人:无 分享
已邀请:
BoredApe

BoredApe - 有问题就会有答案。

请贴相关代码

  • BoredApe

    你可以打断点看看 H5 传递给uploadFile的参数是否正确

    2022-04-28 16:53

  • yancheng909 (作者)

    回复 BoredApe: 参数应该是正常的 因为去掉header h5 安卓都可以上传(后端也可以接收),ios的话没有表单头的情况下 选择图片会提示格式错误,参考了网上说必须要增加'Content-Type': 'multipart/form-data' ;增加后可以选择图片了 临时路径也有了 但是提交到后端,后端接收不到了(后端同样代码 安卓可以接收)

    2022-04-28 17:41

  • yancheng909 (作者)

    回复 yancheng909: 苹果手机h5 提交都不行

    2022-04-28 17:43

  • BoredApe

    回复 yancheng909: 写一个测试工程发上来

    2022-04-28 17:52

  • yancheng909 (作者)

    回复 BoredApe: 加了表单头 好像数据就不是二进制流了

    2022-04-29 10:58

呆狗的一生

呆狗的一生 - 呆狗的一生

不用添加任何header (token除外) ,因为uploadFile会帮你处理好的。

export function upload(options) {  
    options.header = Object.assign({  
        [config.tokenKey]: token.get()  
    }, options.header);  

    options.url = config.apiUrl + options.url;  

    return uni.uploadFile(options).then(res => {  
        // 注意data为string  
        return JSON.parse(res.data).data;  
    }).catch(err => {  
        console.log(err.message);  
        return err;  
    });  

};
  • yancheng909 (作者)

    不添加header 好像ios 选择图片会提示什么格式不对....

    2022-04-28 17:38

  • 呆狗的一生

    回复 yancheng909: 你是添加'content-type': 'multipart/form-data'吗

    2022-04-28 18:18

  • yancheng909 (作者)

    回复 呆狗的一生: 是的 提交了content-type': 'multipart/form-data' 这个就不行了

    2022-04-29 10:00

  • 呆狗的一生

    回复 yancheng909: 是后端接口报错的吗?我后端用的nodejs,上面的代码是我自己用的。没有加这个header

    2022-04-29 10:03

  • yancheng909 (作者)

    回复 呆狗的一生: 不添加content-type': 'multipart/form-data' 后端没有问题,添加了content-type': 'multipart/form-data' 后端接收为空 中间没有其他代码修改

    2022-04-29 10:06

yancheng909

yancheng909 (作者) - 热爱i编程小白

插件  
     <uni-file-picker title="请上传图片作品(10m以下)" v-model="imageValue" file-mediatype="image"  
                                    file-extname="png,jpg,gif" ref='files' :limit="1" @select="select"  
                                    @delete="deletefile"  />  

js   

uni.uploadFile({  
                    url: url + '/Upload/upload',  
                    filePath: e.tempFilePaths[0],  
                    name: 'file',  
                     header: {  
                            'content-type': 'multipart/form-data'    
                        },  
                    formData: {  
                        'images': e.tempFilePaths[0]  
                    },  
                    success: function(res) {  

                    }  
                });  
呆狗的一生

呆狗的一生 - 呆狗的一生

                if (files.length) imgUrls = await this.upload({  
                    filePath: files.map(_ => _.path).join(','),  
                    name: 'filelist',  
                    url: '/tencent/putArray',  
                    fileType: 'image/video/audio',  
                    formData: { pathPrefix: this.pathPrefix }  
                })  

这里的this.upload是上面我贴的upload方法,formData我给出的是一个存储图片的路径前缀。我的header里只加了一个用于检查登录的token

  • yancheng909 (作者)

    以前是有段时间可以的 测试过的 最近不知道是更新了版本还是怎么回事 就不行了

    2022-04-29 10:14

  • yancheng909 (作者)

    你这个是uniapp的云服务器吧

    2022-04-29 10:15

  • 呆狗的一生

    回复 yancheng909: 不是。我是上传到腾讯的对象存储桶的。不是uniCloud的服务空间

    2022-04-29 11:12

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