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回调。
建议的解决方案:
- 在服务端修改,将204改为200并返回一个空的JSON对象
{} - 在客户端统一处理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' })
}
}

