adm-zip を使用して、アップロードされたファイル内のファイルのリストを取得しようとしています。アップロードされたファイルのパスを取得できないため、zip を Buffer に変換して adm-zip に渡そうとしています。しかしzip.getEntries();
、ファイルのリストが表示されません。
checkZipFiles(){
var AdmZip = require("adm-zip");
var filesInput = document.querySelector('input[type="file"]').files[0];
var res;
var zip = new AdmZip(filesInput);
console.log(' zip is '+JSON.stringify(zip));
var zipEntries = zip.getEntries();
console.log(' zipEntries is '+zipEntries);
zipEntries.forEach(function(zipEntry) {
console.log(zipEntry.toString()); // outputs zip entries information
if (zipEntry.entryName == "my_file.txt") {
console.log(zipEntry.data.toString('utf8'));
}
});
var reader = new FileReader();
reader.readAsArrayBuffer(filesInput);
var bytes,buf ;
reader.onloadend = function(e){
var readLen=e.target.result.byteLength;
var arrayBuffer = reader.result
bytes = new Uint8Array(arrayBuffer);
console.log('insidebytes is '+bytes);
buf = new Buffer(e.target.result.byteLength);
for (var i = 0; i < buf.length; ++i) {
buf[i] = bytes[i];
}
console.log(e.target.result.byteLength+' length is '+bytes.byteLength);
var myZip = e.target.result;
console.log('bytes is '+bytes);
console.log('buf is '+buf);
zip = new AdmZip(buf);
// console.log(zip+' reader ');
var zipEntries = zip.getEntries();
console.log(' zip is '+zipEntries);
}
}
バッファを印刷すると、以下のようなものが印刷され、ファイル名がzip内に表示されます。
121832 長さは 121832
}+����Y���L�]��%:�<em>����<コード>_����ld� ��c{\��h7���L��e33� \"୨୧୨୧v�˕3�-��^�'�ڀ霗�^�p�q�W��������v�R�����akny���Egr��� �G�%1/���Wer����\d���A�upR�L����up�jemF���� ��k9y�</em>�^��;h�1 :ca delete.txt �-�-F1p[
しかし AdmZip は以下のエラーを出します。バッファの問題ですか、それとも AdmZip がバッファを読み取ることができませんか?
Uncaught Invalid END header (bad signature) mainHeader.js?4281:35