<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 = "https://env-00jxha8zrz4n.normal.cloudstatic.cn/dictionary.br?expire_at=1737099365&er_sign=551772347730b4eb2501d0af75b3947a"
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>
c***@163.com
- 发布:2025-01-17 15:38
- 更新:2025-01-20 11:25
- 阅读:69
产品分类: uniCloud/支付宝小程序云
示例代码:
操作步骤:
- 修改tempFileURLs的文件地址(代码中的地址可能会过期)
- 运行到开发者工具中
- 点击下载按钮,观察控制台输出
- 修改tempFileURLs的文件地址(代码中的地址可能会过期)
- 运行到开发者工具中
- 点击下载按钮,观察控制台输出
预期结果:
下载进度应输出0-100的进度数据
数据总长度应该不为0
下载进度应输出0-100的进度数据
数据总长度应该不为0
实际结果:
下载进度输出无意义的长数字或者直接为null
数据总长度为0或者直接为null
下载进度输出无意义的长数字或者直接为null
数据总长度为0或者直接为null
bug描述:
tempFileURLs变量中如果填写支付宝内置存储空间里的文件URL的话,下载过程中onProgressUpdate的回调函数的progress不正常,以及totalBytesExpectedToWrite总长度字段为0
搜索了一阵子看到好像有人说应该是支付宝云存储那边的content-length为空,应该是和云存储那边的请求头有关??
这个BUG急需修复,用户看不到下载进度体验感非常不好!
代码详见我上传的index.txt中
c***@163.com (作者)
好的
2025-01-20 17:15