const imgBlob = await fetch(lists[i].url).then(r => r.blob())
const imgFile = new File([imgBlob], lists[i].name, {
type: imgBlob.type
})
uni.uploadFile({
url: apiUrl,
file: file,
fileType:'image',
name: name,
header: {
'Authorization': uni.getStorageSync('token') ? Bearer ${uni.getStorageSync('token')} :
''
},
success: (res) => {
let result = JSON.parse(res.data)
console.log(result);
if (result.code !== '00000') {
uni.showToast({
title: result.msg,
icon: 'error'
})
reject(res)
} else {
resolve(res)
}
},
fail: (err) => {
reject(err)
}
});
5 个回复
Ask小助手
该bug反馈内容基本完整但存在关键缺失:未明确说明运行平台(App/Web/小程序类型),而这是分析uni.uploadFile问题的核心。代码示例存在明显问题——
uni.uploadFile的file参数在非Web平台(如App、小程序)需传入本地文件路径字符串,而非File对象(仅Web支持File/Blob)。用户混淆了多端差异:在App平台应使用plus.io.convertLocalFileSystemURL获取路径,而非直接构造File对象。bug成立但非版本异常:知识库uni.uploadFile文档明确说明各平台实现差异,小程序需配置域名白名单,App平台不支持直接传入File对象。用户遇到的"file error"正是因在非Web环境错误使用File对象导致,与HBuilderX 4.87版本无关(该版本正常支持上传功能)。
建议解决方案:
uni.saveFile保存临时文件后上传路径反馈中"后台返回200但进fail"符合逻辑:客户端因文件参数格式错误提前终止上传,未真正发送请求,故不会触发服务端响应。需补充平台信息和完整错误日志以便精准定位。
DCloud_UNI_JBB
filePath 和 files 不能同时为空,必须有一个
m***@qq.com (作者)
之前都是传的file参数,是Blob格式的文件,files是传什么?
2025-12-25 16:07
DCloud_UNI_JBB
回复 m***@qq.com: 看文档
2025-12-25 16:22
m***@qq.com (作者)
回复 DCloud_UNI_JBB: 请问是不是依赖库的版本改了?file参数不用了?之前能用的,现在要换成filePath,后台接口也得跟着改,很麻烦的。
2025-12-25 16:24
DCloud_UNI_JBB
回复 m***@qq.com: 之前这里有问题,修复了一个bug,你要是不好改,可以先回退hx版本
2025-12-25 16:27
m***@qq.com (作者)
回复 DCloud_UNI_JBB: 好的。HBuilder需要退回到哪个版本?
2025-12-25 16:28
DCloud_UNI_JBB
回复 m***@qq.com: 4.76 你试试
2025-12-25 16:29
m***@qq.com (作者)
回复 DCloud_UNI_JBB: 好的,是不是要重新下载hx?有没有命令降版本?
2025-12-25 16:31
m***@qq.com (作者)
回复 m***@qq.com: 4.76下载解压后运行,报插件【uni-app(vue2)编译器】下载失败,网络请求失败(SsIHandshakeFailedError),这是什么情况?
2025-12-25 16:51
m***@qq.com (作者)
回复 DCloud_UNI_JBB: HBuilderX能不能不要这么坑人啊!修复bug这么不严谨吗?
2025-12-25 17:08
m***@qq.com (作者)
// #ifdef H5
return new Promise((resolve, reject) => {
uni.uploadFile({
url: apiUrl,
file: file,
fileType:'image',
name: name,
header: {
'Authorization': uni.getStorageSync('token') ?
Bearer ${uni.getStorageSync('token')}:''
},
success: (res) => {
let result = JSON.parse(res.data)
console.log(result);
if (result.code !== '000') {
uni.showToast({
title: result.msg,
icon: 'error'
})
reject(res)
} else {
resolve(res)
}
})
// #endif
完整代码如上,是在H5模式下。
空白人吗 - 7年开发经验 可接APP 小程序 网页 后端 vx:wu1020yt
把 file 去掉,改为 filepath,也就是传入文件本地地址方式,别传入文件对象方式,我也出现了,改为地址方式就正常了
m***@qq.com (作者)
改成filepath,后台接口也需要跟着改吧?
2025-12-25 16:31
空白人吗 - 7年开发经验 可接APP 小程序 网页 后端 vx:wu1020yt
不需要
m***@qq.com (作者)
我先试一下,即便后台不改,前端所有调用的地方也都要改,太麻烦了。。。。
2025-12-25 16:55
m***@qq.com (作者)
试过确实不用改后台,直接把file参数名改成filePath,参数值直接传url就可以。只是这也会导致版本整个要调整,简直是现网事故啊!HBuilderX怎么插件升级都不向下兼容的,说的不恰当点,有点像故意搞破坏了。。。
2025-12-25 16:58
m***@qq.com (作者)
降HBuilderX能解决,我情愿降版本了,不然代码改动太大了,崩溃啊。。。太不靠谱了
2025-12-25 17:05
空白人吗
回复 m***@qq.com: 淡定
2025-12-25 17:47
m***@qq.com (作者)
回复 空白人吗: 嗯,还是淡定下来把涉及的地方都改了。。还好这个版本影响面还不算大。
2025-12-25 18:36
DCloud_UNI_JBB
回复 m***@qq.com: 这里本来是有bug,才导致了只传file参数也能运行
2025-12-26 11:21
要回复问题请先登录或注册
公告
更多>相关问题