<template>
<view>
<button @click="main()">下载</button>
</view>
</template>
<script setup lang="ts">
/**
* @desc 函数节流,单位时间内多次执行只执行一次
* @param func 函数
* @param wait 延迟执行毫秒数
* @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发
*/
function throttle(func, wait = 1000, type = 1) {
let previous = 0;
let timeout;
return function () {
let context = this;
let args = arguments;
if (type === 1) {
let now = Date.now();
if (now - previous > wait) {
func.apply(context, args);
previous = now;
}
} else if (type === 2) {
if (!timeout) {
timeout = setTimeout(() => {
timeout = null;
func.apply(context, args)
}, wait)
}
}
}
}
async function main() {
const tempFileURLs = 填写文件下载地址,起码需要下载超过10s的文件(或者适当调整timeout数值)
const objPath = `${wx.env.USER_DATA_PATH}/dictionary/`
const fileName = "dictionary.br"
downloadFile(tempFileURLs, objPath, fileName)
}
function downloadFile(link, objPath, fileName,timeout =
10000) {
return new Promise((resolve, reject) => {
const csvDownloadTask = uni.downloadFile({
url: link, //下载的url
timeout: timeout,
success: (res) => {
if (res.statusCode === 200) {
console.log(`文件${fileName}下载成功`, res);
resolve(res)
// return true
} else {
console.error(
`文件${fileName}下载失败,code:${res.statusCode}`);
reject(res.statusCode)
return false
}
},
fail(e) {
console.error(`文件${fileName}下载失败:`, e);
reject(e)
return false
}
});
csvDownloadTask.onProgressUpdate(throttle((res) => {
console.log(`${fileName}展示进度obj:`, res);
console.log(`${fileName}下载进度:${res.progress}`);
console.log(
`${fileName}已经下载的数据长度${res.totalBytesWritten}`);
console.log(`${fileName}预期需要下载的数据总长度:${res
.totalBytesExpectedToWrite}`);
}, 300));
})
}
</script>
- 发布:2025-01-17 15:14
- 更新:2025-01-18 10:31
- 阅读:30
产品分类: uniapp/小程序/微信
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10 22631.4751
HBuilderX类型: 正式
HBuilderX版本号: 4.45
第三方开发者工具版本号: Stable 1.06.2409140
基础库版本号: 3.7.1
项目创建方式: HBuilderX
示例代码:
操作步骤:
- 修改tempFileURLs变量中的文件地址(我的文件可能会过期)
- 运行程序到真机中
- 点击下载按钮
- 打开控制台查看log
- 修改tempFileURLs变量中的文件地址(我的文件可能会过期)
- 运行程序到真机中
- 点击下载按钮
- 打开控制台查看log
预期结果:
能够正常下载完整的文件
能够正常下载完整的文件
实际结果:
10秒后就提示errno: 5, errMsg: "downloadFile:fail fail:time out"
10秒后就提示errno: 5, errMsg: "downloadFile:fail fail:time out"
bug描述:
errno: 5, errMsg: "downloadFile:fail fail:time out"
使用微信开发者调试工具的真机模拟是可以下载文件的,不会超时.
但是一旦使用真机预览,查看控制台就可以看到下面截图的报错,代码里的默认timeout是10000ms也就是10s,按道理这个是与服务器失去连接后10s后报超时错误,但是通过截图可以看到实际上一直都在下载文件,与服务器连接一直通畅的,但是10s到了后就直接报超时了???
我默认使用的是支付宝云存储中的文件,我也试过别的文件,都是在真机预览10s后报超时
c***@163.com (作者)
都有这个问题
29 分钟前