gpt4 book ai didi

javascript - 使用 FileReader 和 JSZip.js 在浏览器中打开 zip 文件

转载 作者:可可西里 更新时间:2023-11-01 02:09:46 26 4
gpt4 key购买 nike

我正在尝试使用 FileReader 和 JSZip.js 在浏览器中打开 zip 文件,然后处理其中包含的文件。我不知道如何正确地将 FileReader 对象传递给 JSZip。

这是我用来加载 javascript 的页面的精简版:

<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8" />

<script type="text/javascript" src="zipscan.js"></script>
<script type="text/javascript" src="jszip.js"></script>
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>

</head>
<body>

<div id="openFile"><input type="file" id="inputFile" /></div>

</body>
</html>

删除所有不必要的代码后,zipscan.js 中的 javascript:

function checkFiles()
{
//Check support for the File API support
if ( window.File && window.FileReader && window.FileList && window.Blob )
{
var fileSelected = document.getElementById( "inputFile" );
fileSelected.addEventListener( "change", handleFile, false );
}
else
{
alert( "Files are not supported" );
}
}


function handleFile( evt )
{
//Set wanted file object
var fileToRead = evt.target.files[0];

//Create fileReader object
var fileReader = new FileReader();
fileReader.onload = function ( e )
{
//Create JSZip instance
var archive = new JSZip().loadAsync( e.target );

//Testing that it is loaded correctly
alert( e.target );
alert( archive.file( "hello.txt" ).name );
}
fileReader.readAsArrayBuffer( fileToRead );
}

window.addEventListener( "load", checkFiles, false );

第一个警告显示 [object FileReader],第二个警告导致 TypeError,archive.file(...) 为空。

我已经使用 FileReader 的 readAsText 方法和相同的代码成功打开文本文件,所以如果出现错误,要么是在使用 readAsArrayBuffer(JSZip 文档建议它)时,要么是在我使用它的方式中。我发现的关于 JSZip 的几乎所有资源都使用带有构造函数参数的旧方法而不是 loadAsync,所以可能是我没有正确使用它。

最佳答案

您可以直接传递 File 对象,而无需通过 FileReaderFile 对象本身是一个(扩展的)Blob,JSZip 可以将其作为 loadAsync() 的参数。

工作示例

f.onchange = function() {
var zip = new JSZip();
zip.loadAsync( this.files[0] /* = file blob */)
.then(function(zip) {
// process ZIP file content here
alert("OK")
}, function() {alert("Not a valid zip file")});
};
<script src="https://raw.githubusercontent.com/Stuk/jszip/master/dist/jszip.min.js">
</script>
<input type=file id=f>

关于javascript - 使用 FileReader 和 JSZip.js 在浏览器中打开 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com