前言:公司开发OTA升级下位机设备,需要后台上传压缩包,以流形式发送给小程序,试了很多办法终于得到了解决,废话不多直接上代码
第三方库:JSZip,因为需要解压文件所以我用的第三方库,需要的可以下载
一、引入zpi文件:
下载只需把jszip.min.js文件粘贴到项目中即可
// 获取文件系统管理器
const fs = wx.getFileSystemManager();
//引入zip文件
const JSZip=require('./jszip.min');
二、完整代码
// 获取文件系统管理器
const fs = wx.getFileSystemManager();
const JSZip=require('./jszip.min');
Page({
onLoad: function (options) {
api.get('/version/control/deviceName?deviceName='+'压力').then(res => {
let list=JSON.parse(res.data.urls)
console.log(list,'<<<=====json转换');
list.map(item=>{
if(item.includes('LXXD_L')){
console.log('/user/operation/inputStream?path='+item);
let arr={
path:item
}
wx.request({
url: 'http:xxxxx/user/operation/inputStream',
method: 'POST',
data:arr,
responseType: 'arraybuffer', // 设置响应类型为 arraybuffer
success: function(res) {
const binaryData = res.data; // 获取二进制数据
// 定义文件路径
const filePath = wx.env.USER_DATA_PATH + '/LXXD_L_ota_dual_bank.zip';
// 将二进制数据写入文件
fs.writeFile({
filePath,
data: binaryData,
encoding: 'binary',
success: () => {
// 读取文件
fs.readFile({
filePath,
encoding: 'binary', // 指定编码方式为 binary
success: (data) => {
// 解压文件
const zip = new JSZip();
zip.loadAsync(data.data, { binary: true }).then((zip) => {
// 遍历文件并输出
zip.forEach((relativePath, file) => {
//文件名字
console.log(`File ${relativePath}`);
});
});
},
fail: (err) => {
console.error('读取文件失败', err);
},
});
},
fail: (err) => {
console.error('写入文件失败', err);
},
});
},
fail: function(err) {
// 处理请求失败的情况
}
});
}
})
}).catch(arr => {
console.log(arr, '<=====失败啦');
})
},
})