uni-app 上传uni.uploadFile 返回值在手机端和h5不一致

uni-app 上传uni.uploadFile 返回值在手机端和h5不一致

信息类别 详情
产品分类 uniapp/App
PC开发环境 Mac
PC版本号 11.2
HBuilderX 正式
HBuilderX版本 3.1.11
手机系统 Android
手机版本号 Android 11
手机厂商 华为
手机机型 红米9
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX
App下载地址 https://app.mi.com/details?id=com.shenshenju.sw

操作步骤:

  • 调用uni.uploadFile上传视频

预期结果:

  • h5和移动端的返回一样

实际结果:

  • h5 正常返回 移动端返回的data 里面只有一个七牛的上传地址 没有返回成功后的地址

bug描述:

  • 上传uni.uploadFile 返回值 手机端和h5 返回的东西不一致


更多关于uni-app 上传uni.uploadFile 返回值在手机端和h5不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

看你截图手机端请求返回都报错statusCode: 400,说明上传是失败的,失败就没有文件地址的。 H5端返回 statusCode: 200,说明上传成功了才有返回文件地址

更多关于uni-app 上传uni.uploadFile 返回值在手机端和h5不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个上传成功是以uploadFile:ok 为准还是这个statusCode为准 如果失败的话应该走的fail回调吧 这个走的都是success

以接口返回为准,接口没有抛请求报错,是不会走fail回调。success回调保险起见需要判断下statusCode

好的。了解了

统一说一下 我这边今天发现的是七牛云欠费了,充钱之后就好了,但是 还是不理解 为啥都欠费了 h5 和移动端一个有返回 一个上传失败

有可能是上传token在欠费前生成的吧。

回复 chenli: 好的 了解了,刚刚问了后端他说了 可能会重新生成 可能是以前老的,有个有效期的

这是一个典型的平台差异问题。uni.uploadFile在不同平台确实存在返回数据结构不一致的情况。

从你提供的截图可以看出:

  1. H5端返回了完整的七牛云上传响应,包含key、hash等完整信息
  2. App端只返回了上传地址,缺少成功后的文件地址信息

这是由于uni-app在封装上传功能时,各平台底层实现不同导致的:

  • H5端基于XMLHttpRequest实现
  • App端基于原生网络请求实现

解决方案:

  1. 统一处理响应数据:在success回调中,对返回数据做平台判断和统一格式化
uni.uploadFile({
    url: 'your-upload-url',
    filePath: filePath,
    name: 'file',
    success: (res) => {
        let responseData = {}
        if (typeof res.data === 'string') {
            // App端需要手动解析
            responseData = JSON.parse(res.data)
        } else {
            // H5端直接使用
            responseData = res.data
        }
        // 统一处理业务逻辑
        console.log(responseData)
    }
})
  1. 检查服务端配置:确保服务端在不同客户端访问时返回统一的数据格式

  2. 使用条件编译:针对特定平台做差异化处理

// #ifdef APP-PLUS
// App端特殊处理
// #endif

// #ifdef H5
// H5端处理
// #endif
回到顶部