uni-app uni.uploadFile上传文件httpcode为204直接走fail方法导致直接失败了

uni-app uni.uploadFile上传文件httpcode为204直接走fail方法导致直接失败了

操作步骤:

之前我9月份的时候还是可以正常走success方法的。现在就不行了

预期结果:

希望可以204code走success方法

实际结果:

204code走fail方法

bug描述:

statusCode不应该为200+都算成功吗?

const uploadTask = uni.uploadFile({  
    url: rootUrl,  
    file: this.selectedFile.file,  
    name: 'file',  
    formData,  
    success: (res) => {  
        if (res.statusCode === 204 || res.statusCode === 200) {  
            this.$refs.loadingPop && this.$refs.loadingPop.overMove(1)  
            this.uploading = false  
            uni.showToast({ title: '上传成功', icon: 'success', duration: 1200 })  
            const payload = {  
                type: 'fileUploaded',  
                file: {  
                    url: `${that.$UPLOAD_BASE}/${encodeURI(objectKey)}`,  
                    name: baseName,  
                    size: this.selectedFile.size,  
                    type: this.selectedFile.type,  
                    duration: this.selectedFile.duration  
                }  
            }  
            try {  
                if (jssdk && jssdk.miniProgram && jssdk.miniProgram.postMessage) {  
                    jssdk.miniProgram.postMessage(payload)  
                }  
            } catch (e) {}  
            setTimeout(() => {  
                try { jssdk && jssdk.miniProgram && jssdk.miniProgram.navigateBack && jssdk.miniProgram.navigateBack() } catch(_) {}  
                try { uni.navigateBack() } catch(_) {}  
                try { history.back() } catch(_) {}  
            }, 300)  
        } else {  
            this.$refs.loadingPop && this.$refs.loadingPop.overMove(2)  
            this.uploading = false  
            uni.showToast({ title: '上传失败:' + res.statusCode, icon: 'none' })  
        }  
    },  
    fail: (err) => {  
        this.$refs.loadingPop && this.$refs.loadingPop.overMove(2)  
        this.uploading = false  
        uni.showToast({ title: '上传失败', icon: 'none' })  
    }  
})  
uploadTask.onProgressUpdate((res) => {  
    this.$refs.loadingPop && this.$refs.loadingPop.updateProgress(res.progress)  
})
信息 内容
产品分类 uniapp/H5
PC开发环境 Windows
PC开发环境版本号 19045.2193
HBuilderX类型 正式
HBuilderX版本号 4.85
浏览器平台 Chrome
浏览器版本 版本 142.0.7444.163(正式版本) (64 位)
项目创建方式 HBuilderX
App下载地址 https://h5.langup.cn/pages/AI/file-picker?callback=uploadCloud

更多关于uni-app uni.uploadFile上传文件httpcode为204直接走fail方法导致直接失败了的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

filePath 和 files 不能同时为空,参考官方文档 https://uniapp.dcloud.net.cn/api/request/network-file.html#uploadfile

更多关于uni-app uni.uploadFile上传文件httpcode为204直接走fail方法导致直接失败了的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据HTTP协议标准,204状态码表示"无内容",属于成功的2xx状态码范围。uni.uploadFile在之前的版本中确实会将204状态码视为成功,但近期版本可能调整了判断逻辑。

目前uni-app对success回调的触发条件是:HTTP状态码为200且服务器返回了有效响应体。204状态码虽然表示成功,但明确表示没有响应体,因此被归入了fail回调。

建议的解决方案:

  1. 在服务端修改,将204改为200并返回一个空的JSON对象{}
  2. 在客户端统一处理fail回调,增加对204状态码的特殊处理:
fail: (err) => {
  if (err.statusCode === 204) {
    // 将204视为成功处理
    this.handleUploadSuccess()
  } else {
    this.$refs.loadingPop && this.$refs.loadingPop.overMove(2)
    this.uploading = false
    uni.showToast({ title: '上传失败', icon: 'none' })
  }
}
回到顶部