jsZip解压本地zip并展示文件
问题场景
利用uFile插件下载zip到本地目录:C:\Users\cjq\AppData\LocalLow\UFILE\99001\temp\images.zip,现在把该zip里的图片展示出来
应对方案
利用ie的activeX将本地目录文件转Blob,jsZip读取Blob,然后读出单个文件将其转成base64,就可以展示出来了
代码实现
安装jsZip
cnpm install jsZipzipDemo.vue
<!--zipDemo.vue--start-->
<!--zipDemo.vue--end-->
activexobj.js
//本地路径转base64
export function pathToDataURL(file) {
try{
var type=file.slice(file.lastIndexOf(".")+1)
var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.6.0');
xmlHttp.open('POST',file, false);
xmlHttp.send('');
var xml_dom = new ActiveXObject('MSXML2.DOMDocument');
var tmpNode = xml_dom.createElement('tmpNode');
tmpNode.dataType = 'bin.base64';
tmpNode.nodeTypedValue = xmlHttp.responseBody;
var fileBase="";
switch (type) {
case "pdf":fileBase="data:application/pdf;base64,";break;
case "jpg":fileBase="data:image/jpg;base64,";break;
case "png":fileBase="data:image/png;base64,";break;
case "bmp":fileBase="data:image/bmp;base64,";break;
case "zip":fileBase="data:application/x-zip-compressed;base64,";break;
}
var imgBase64Data = fileBase+tmpNode.text.replace(/\n/g,"");
return imgBase64Data;
}catch (e) {
console.log(e);
}
}
//base64转File(IE)
export function dataURLtoFile(dataurl,fileName){
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
var theBlob=new Blob([u8arr], { type: mime });
theBlob["lastModifiedDate"] = new Date();
theBlob["name"] = fileName;
return theBlob;
}
// arrayBuffer转base64
export function arrayBufferToBase64( buffer,fileName ) {
var type=fileName.slice(fileName.lastIndexOf(".")+1)
var fileBase="";
switch (type) {
case "pdf":fileBase="data:application/pdf;base64,";break;
case "jpg":fileBase="data:image/jpg;base64,";break;
case "png":fileBase="data:image/png;base64,";break;
case "bmp":fileBase="data:image/bmp;base64,";break;
case "zip":fileBase="data:application/x-zip-compressed;base64,";break;
}
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return fileBase+window.btoa(binary);
}

浙公网安备 33010602011771号