米友商城
米友商城
  • 发布:2025-06-11 11:52
  • 更新:2025-06-13 11:49
  • 阅读:101

uni.uploadFile在鸿蒙端使用时,有时上传图片后,后台图片上传成功,但是前台没有反应。

分类:uni-app
methods: {  
            testUpload() {  
                uni.chooseImage({  
                    count: 1,  
                    sizeType: ['compressed'],  
                    sourceType: ['camera'],  
                    success: (res) => {  
                        console.log('chooseImage success, temp path is ', res.tempFilePaths[0]);  
                        var imageSrc = res.tempFilePaths[0]  
                        uni.uploadFile({  
                            //url: 'https://unidemo.dcloud.net.cn/upload',  
                            url: this.uploadUrl,  
                            filePath: imageSrc,  
                            fileType: 'image',  
                            name: 'data',  
                            header: {  
                                Authorization: uni.getStorageSync('user-token').token  
                            },  
                            success: (res) => {  
                                console.log("uploadImage success, res is:", res);  
                                uni.showToast({  
                                    title: '上传成功',  
                                    icon:'success',  
                                    duration:1000  
                                })  
                            },  
                            fail: (err) => {  
                                console.log('uploadImage fail', err);  
                                uni.showToast({  
                                    content: err.errMsg,  
                                    showCancel: false  
                                })  
                            },  
                            complete: (i) => {  
                                console.log('complete=', i);  
                            }  
                        })  
                    }  
                })  
            }  

}

其中sourceType: ['album'],的时候,每次都能走回调函数,但是如果是sourceType: ['camera'],的时候,偶尔会走回调,大部分的请求都会止于console.log('chooseImage success, temp path is ', res.tempFilePaths[0]);这行代码

2025-06-11 11:52 负责人:无 分享
已邀请:
DCloud_UNI_yuhe

DCloud_UNI_yuhe

你加一个fail逻辑看一下会输出什么内容

  • 米友商城 (作者)

    加fail逻辑了。上述代码中不仅有success,还有fail和complete,测试结果是,这三个回调都不走

    2025-06-11 13:45

  • DCloud_UNI_yuhe

    回复 米友商城: 不能我这测试的是有的,你看一下你代码是不是有拦截器之类的给拦了

    2025-06-11 14:31

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: 请求能到后台,图片也能上传成功,就是前台的回调不走

    2025-06-11 15:08

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: sourceType: ['album'],就能走回调,但是sourceType: ['camera'],就不行

    2025-06-11 15:12

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: 关键是偶尔还能成功回调一次,然后我再上传一个,又不行了

    2025-06-11 15:39

  • DCloud_UNI_yuhe

    回复 米友商城: 我这里测试过,没有复现,你得提供一下完整的可复现工程看一下

    2025-06-11 19:02

米友商城

米友商城 (作者)

补充:如果等待时间很长的话,会走fail,并报错:uploadImage fail {errMsg: "uploadFile:fail Failure when receiving data from the peer"}

  • DCloud_UNI_yuhe

    等待时间很长是等待什么?

    2025-06-11 19:02

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: 调用uni.chooseImage函数,不是在success里打印了chooseImage success, temp path is这句话吗。控制台输出了这句话,然后调用了uni.uploadFile这个函数,但是一直没走回调,就这么一直等着,不做别的操作,一直等待,有的时候就会打印出uploadImage fail {errMsg: "uploadFile:fail Failure when receiving data from the peer"}这个日志

    2025-06-12 09:05

  • DCloud_UNI_yuhe

    回复 米友商城: 你新建一个项目,带前后端一起,提供一下一个测试项目吧

    2025-06-12 10:59

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: 我新建了一个SpringBoot的后台就可以,但是我原SpringCloud里就不行,也没有拦截器或者过滤器之类的,一样的代码,就是不行

    2025-06-12 14:17

  • DCloud_UNI_yuhe

    回复 米友商城: 那这样你得检查一下你后端的问题了

    2025-06-12 14:30

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: 用postman调用我的后端,能返回正常的json

    {

    "code": 200,

    "msg": "success",

    "data": {

    "code": 0,

    "message": "操作成功",

    "data": null

    }

    }

    但是前端就是接受不到,三个回调都不走

    2025-06-12 14:32

  • 米友商城 (作者)

    回复 DCloud_UNI_yuhe: 我把sourceType: ['camera'],设置成拍照,拍的照片不走回调,但是我改成sourceType: ['album'],后,再从相册里选刚才拍的不走回调的那个照片,就可以走回调

    2025-06-12 16:16

米友商城

米友商城 (作者)

问题已解决。

使用测试设备:华为Mate 60 Pro+

HarmonyOS版本:5.0.1

现象:调用uni.chooseImage且sourceType: ['camera'],的情况下,在success回调中继续调用uni.uploadFile,url指向SpringCloud网关后台。在网关中添加过滤器,查看参数,发现在httpHeaders中会多了一个Expect参数,且值为100-continus。这个参数会导致网关不会往前台响应数据,而继续等待。导致前台uni.uploadFile的回调都不走。而使用sourceType: ['album']的情况下就不会携带Expect参数,网关正常返回200。安卓端测试也没有这个问题,目前只发现在该特定环境下有这个问题。

解决方案:在网关的自定义过滤器中,去掉Expect参数即可

要回复问题请先登录注册