uni-app中uni.uploadFile上传文件的timeout参数不起作用(4.29、4.07、3.7.6版本) 真机测试多个版本均无效
uni-app中uni.uploadFile上传文件的timeout参数不起作用(4.29、4.07、3.7.6版本) 真机测试多个版本均无效
操作步骤:
官方例子;都是可以上传了;当超时超过配置的时间;也不受控制;忘官方解决这个bug;
预期结果:
希望timeout 可以限制住超时;当我们的上传到30s;可以提示超时;
实际结果:
目前不受控制;感觉设置timeout 没有任何效果;
bug描述:
uni.uploadFile上传文件的timeout参数不起作用;比喻超时时间设置为10ms; 也可以正常上传;timeout完全没有用;
项目信息 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | windows10和windows11 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | Android |
手机系统版本号 | Android 11 |
手机厂商 | 小米 |
手机机型 | 多个品牌多个机型;小米MIX2、三星SM-G988U1;模拟器都不行 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
App下载地址或H5网址 | 官方例子随便一个demo,都有这个问题哦 |
这个超时时间是连接超时时间,也就是说网络畅通就不会超时,你想要的效果是这个上传30s就中断,这个考虑自己业务上使用定时器实现。
我也遇到了一样的问题
你好,请问你最终怎么解决的?
在 uni-app
中使用 uni.uploadFile
方法进行文件上传时,确实有时会遇到 timeout
参数不起作用的问题。这可能是由于某些版本的 uni-app
SDK 或者底层网络库存在的bug导致的。尽管我们不能直接修改 SDK,但可以通过一些编程技巧来间接处理这个问题。
以下是一个示例代码,展示了如何在 uni.uploadFile
的基础上,通过自定义的 timeout 逻辑来处理超时情况。这里我们将使用 Promise
和 setTimeout
来实现这个功能。
// 自定义上传函数,包含超时处理
function uploadFileWithTimeout(url, filePath, formData, customTimeout = 10000) {
return new Promise((resolve, reject) => {
// 设置一个定时器用于超时处理
const timeoutId = setTimeout(() => {
reject(new Error('Upload timed out'));
}, customTimeout);
// 执行文件上传
uni.uploadFile({
url: url,
filePath: filePath,
name: 'file',
formData: formData,
success: (uploadFileRes) => {
clearTimeout(timeoutId); // 成功上传后清除定时器
resolve(uploadFileRes);
},
fail: (error) => {
clearTimeout(timeoutId); // 上传失败也清除定时器
reject(error);
}
});
});
}
// 使用示例
const uploadUrl = 'https://example.com/upload';
const filePath = '/path/to/your/file';
const formData = {
user: 'testuser'
};
uploadFileWithTimeout(uploadUrl, filePath, formData, 5000) // 自定义超时时间为5秒
.then(response => {
console.log('Upload success:', response);
})
.catch(error => {
console.error('Upload error:', error);
});
在上述代码中,uploadFileWithTimeout
函数封装了 uni.uploadFile
,并添加了一个自定义的超时处理逻辑。通过 setTimeout
设置一个定时器,如果文件上传在指定的时间内没有完成(即没有触发 success
或 fail
回调),则定时器会触发并拒绝 Promise,从而抛出超时错误。
这种方法虽然绕过了 uni.uploadFile
自带的 timeout
参数不起作用的问题,但提供了类似的功能,确保了在上传操作超时时能够给出相应的反馈。请注意,这里的 customTimeout
单位是毫秒(ms)。
希望这个解决方案能够帮助你处理 uni.uploadFile
的超时问题。如果问题依然存在,建议查阅最新的 uni-app
文档或社区,看看是否有相关的修复或更新。