3***@qq.com
3***@qq.com
  • 发布:2020-07-09 10:43
  • 更新:2023-09-05 12:02
  • 阅读:5500

【报Bug】uni.uploadFile 服务端返回HTTP响应码为500时,complete,suceess,fail回调函数中,都获取不到响应的信息

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOS Catalina10.15.5

手机系统: Android

手机系统版本号: Android 7.1.1

手机厂商: vivo

手机机型: X9

页面类型: vue

打包方式: 云端

项目创建方式: CLI

CLI版本号: 4.3.1

示例代码:
/**  
 * uni upload 基础封装  
 * @param filePath  
 * @param formData  
 * @param uploadUrl  
 * @param header  
 * @param name  
 * @returns {Promise<unknown>}  
 */  
const upload = (filePath, formData = {}, uploadUrl = '', header = {}, name = 'file') => {  
  return new Promise((resolve, reject) => {  
    uni.uploadFile({  
      url: uploadUrl,  
      filePath: filePath,  
      name: name,  
      header: header,  
      formData: formData,  
      success(res) {  
        console.log('success.res', res);  
        const {statusCode, data} = res;  
        if (statusCode === 200) {  
          const response = JSON.parse(data);  
          resolve(response);  
        }  
        reject(res);  
      },  
      fail(res) {  
        console.log('fail.res', res);  
        reject(res);  
      },  
      complete: (res) => {  
        console.log('complete.res', res);  
      }  
    })  
  });  
};

操作步骤:

服务端返回500响应码,并返回json数据

预期结果:

响应码为500时,res.data应该也能获取到服务端返回的数据

实际结果:

响应码为500时,res.data为请求的url

bug描述:

uni.uploadFile 服务端返回HTTP响应码为500时,安卓中无法获取响应数据,success,complete回调函数中打印数据 res, res.statusCode=500,res.data的值为请求的url,而非服务端返回的响应信息,H5中可以正常获取响应信息

2020-07-09 10:43 负责人:无 分享
已邀请:

最佳回复

DCloud_Android_DQQ

DCloud_Android_DQQ

bug 已确认。 下个alpha 版本会修复此问题

HX 3.6.4 已修复

  • 2***@qq.com

    我上传文件选择不压缩文件,返回500,我默认压缩就能上传成功,请问这是什么问题

    2022-10-17 16:32

  • DCloud_Android_DQQ

    回复 2***@qq.com: 这个问题已修复的。 你新开个问题

    2022-10-31 15:29

  • 3***@qq.com

    回复 DCloud_Android_DQQ: 我上传图片,H5可以请求到上传成功,真机模拟就返回上传失败说我给后端传值的字段名不存在,请问h5跟app的上传有什么差异嘛

    2022-11-17 17:55

  • DCloud_Android_DQQ

    回复 3***@qq.com: 有差异。不同平台的标准都遵循uni-app 标准。标准之外实现可能有差异

    2022-11-18 11:16

  • x***@163.com

    后端返回了statuscode=400,错误信息也被替换为url了

    2023-02-14 17:57

c***@foxmail.com

c***@foxmail.com

大佬解决了吗?我也遇到这个问题了

5***@qq.com

5***@qq.com

修复了吗?我也遇到这个问题了

kdb

kdb

我也是这个问题 code是400 返回值res.data是空 但是小程序模拟器上返回值是完整的

1***@qq.com

1***@qq.com

没有大佬解决这个问题吗?

DCloud_Android_DQQ

DCloud_Android_DQQ

HTTP 500是服务器内部错误。本身就是没有数据的,你期望返回什么数据。

一般500是服务器软件返回的一个自带HTML,如下图

  • 1***@qq.com

    大佬,麻烦再关注一下我的问题

    2021-09-22 14:35

1***@qq.com

1***@qq.com

我这边app是使用uni.uploadFile进行上传,图片上传成功了,然后走下面的别的验证逻辑,会抛出异常,我在前端success里会接到下图这样的异常,但异常信息不是我主动抛出的那个,而是看到返回500,data里面变成url了,请问这个是什么问题?

  • DCloud_Android_DQQ

    听上去是你自己的验证程序 抛出了500

    2021-09-22 14:37

  • 1***@qq.com

    回复 DCloud_Android_DQQ: 是的,我抛出的也是500,但data信息不是我抛出的,这里的data好像是自动加上的,我抛出的具体的文字描述

    2021-09-22 14:52

  • 2***@qq.com

    请问解决了吗 我也是同样的问题 success中返回的这个异常

    2021-11-15 15:32

2***@qq.com

2***@qq.com - 码农小强

请问解决了吗 我也是同样的问题 success中返回的这个异常

Anet

Anet

之前一直以为是后台接口返回这种URL数据呢,还一直找后台修复呢,状态码非200情况下,比如422,也需要接收错误提示语来提示用户,哎

Anet

Anet

@DCloud_Android_DQQ

选择图片上传之后报422,正常会接收到后台返回的提示语,目前H5正常,App端接收到一个url链接

注意:需要在App端才能复现,当初是在浏览器调试好,打包App之后发现没有提示语,才知道有这么个问题,你下载了demo之后和我说一下,我把demo删掉

1***@qq.com

1***@qq.com

请问解决了吗,响应码为500时,res.data为请求的url

  • Anet

    解决了的

    2022-10-26 14:45

  • 1***@qq.com

    我data返回的还是请求的url

    2022-10-26 14:49

  • 1***@qq.com

    回复 Anet: 安卓返回的是请求的url,ios data返回的是空

    2022-10-26 14:50

  • Anet

    回复 1***@qq.com: 你编辑器版本多少?

    2022-10-26 14:56

  • 1***@qq.com

    回复 Anet: 3.4.18.20220630

    2022-10-26 15:34

  • Anet

    回复 1***@qq.com:

    你更新到最新版本呀,正式版也行 3.6.4

    2022-10-26 15:37

  • Anet

    我忘记他是在哪个版本修复的了

    2022-10-26 15:38

DCloud_Android_DQQ

DCloud_Android_DQQ

已修复

x***@163.com

x***@163.com

后端返回了statuscode=400,错误信息也被替换为url了

  • DCloud_Android_DQQ

    微信小程序 也是这个逻辑

    2023-02-14 18:03

  • x***@163.com

    回复 DCloud_Android_DQQ: 那这样后端自定义的error message全部被屏蔽掉了啊

    2023-02-15 10:03

  • DCloud_Android_DQQ

    回复 x***@163.com: 没理解你的问题 ,重新提个ask ,提供一下可以说明问题的示例

    2023-02-15 11:41

x***@163.com

x***@163.com

请求回调:
success: (res) => {
if (res.statusCode == 200 || res.statusCode == 201) {
resolve(submitStatus(file.uri, 'success'))
} else {
console.log(res)
resolve(submitStatus(file.uri, 'fail'))
}
},
fail(err){
console.log(err)
resolve(submitStatus(file.uri, 'fail'))
},

返回值:
{
"data": "https://infinite-apim.azure-api.net/xxxxxxxxxxxx",
"statusCode": 400,
"errMsg": "uploadFile:ok"
}
我这边只能在success的回调的else中打印res,fail的分支一直都进不去

w***@qq.com

w***@qq.com

你好,请问我运行到内置浏览器可以上传拿到地址展示,但是作为手机内嵌h5上传返回500 Internal server error,path是请求的接口地址,是什么原因呢?

  • Anet

    跨域?

    2023-04-25 16:51

s***@samexsys.cn

s***@samexsys.cn

请问解决了吗,app响应码为400时,res.data为请求的url,编辑器版本是3.7.11

要回复问题请先登录注册