在微信小程序中,RequestTask.onChunkReceived
是用于监听分块数据接收事件的接口。此功能适用于需要逐步接收大数据(例如流媒体、文件分块等)的场景,可以显著提升大文件传输的性能和用户体验。
以下是详细介绍和使用方法:
1. 功能说明
用途:监听通过 wx.request
或 wx.downloadFile
发起的请求过程中,每次接收到的数据块。
支持版本:微信小程序基础库 2.10.0 及以上。
常见场景:流媒体数据处理。
大文件下载或逐步加载。
长连接场景中需要逐块处理服务器响应。
2. 基本用法
以下是 onChunkReceived
的基本示例:
const requestTask = wx.request({
url: 'https://example.com/large-file', // 请求的URL
method: 'GET',
success(res) {
console.log('请求完成,总数据:', res.data);
},
fail(err) {
console.error('请求失败:', err);
},
});
// 监听分块数据
requestTask.onChunkReceived((res) => {
console.log('接收到一块数据:', res);
});
3. 参数说明onChunkReceived
的回调参数:res
:data
(ArrayBuffer):接收到的分块数据。isLastChunk
(Boolean):是否是最后一块数据。
示例回调数据:
{
data: ArrayBuffer, // 当前接收的分块数据
isLastChunk: false, // 表示这不是最后一块数据
}
4. 结合场景使用
4.1 实现流式文件接收和保存
适用于处理大文件的分块接收:
const fs = wx.getFileSystemManager();
const filePath = `${wx.env.USER_DATA_PATH}/largeFile.tmp`;
const requestTask = wx.request({
url: 'https://example.com/large-file',
responseType: 'arraybuffer', // 确保接收的数据是二进制
success() {
console.log('文件接收完毕');
},
});
let totalData = new Uint8Array();
requestTask.onChunkReceived((res) => {
console.log('接收到分块数据:', res);
const chunk = new Uint8Array(res.data);
totalData = Uint8Array.from([...totalData, ...chunk]); // 合并数据
if (res.isLastChunk) {
// 将数据写入本地文件
fs.writeFile({
filePath,
data: totalData.buffer,
success: () => console.log('文件保存成功!路径:', filePath),
fail: (err) => console.error('文件保存失败:', err),
});
}
});
4.2 实现流式加载进度条
let totalReceived = 0;
const requestTask = wx.request({
url: 'https://example.com/large-file',
responseType: 'arraybuffer',
success() {
console.log('所有数据已接收完成');
},
});
requestTask.onChunkReceived((res) => {
totalReceived += res.data.byteLength;
console.log(`当前接收总量:${totalReceived} 字节`);
if (res.isLastChunk) {
console.log('接收完成!');
}
});
5. 注意事项
性能优化:
使用 ArrayBuffer
来处理数据块,避免不必要的类型转换。
对接收到的分块数据可以及时处理,避免在内存中积累大量未处理数据。
兼容性:
请确保小程序基础库版本 >= 2.10.0。
测试 onChunkReceived
是否适用于目标用户群的微信版本。
与 wx.downloadFile
的区别:wx.request
通常用于获取 API 数据,但可以用 onChunkReceived
实现类似文件流处理。wx.downloadFile
直接用于文件下载,但不支持分块监听。
通过 RequestTask.onChunkReceived
,可以灵活地处理分块数据接收,为用户提供流畅的加载体验,特别是在需要实时处理大数据的场景中极为实用。
发布者:myrgd,转载请注明出处:https://www.object-c.cn/4874