gpt4 book ai didi

javascript - 在使用 Node 提取 zip 文件时将流式数据连接到单个文件或字符串中

转载 作者:行者123 更新时间:2023-11-30 15:21:08 26 4
gpt4 key购买 nike

我正在使用 yauzl Node 模块。我正在从 Zip 文件中提取 XML 文件。在读取条目时,在 readSteam.on('data') 回调函数中,我将 entry.filename 及其内容记录为字符串。但是,某些文件会被分解成多个文件。这些部分共享相同的 fileName。每个部分包含部分文件内容。

  let options = {
lazyEntries: true
}
yauzl.open(params.pathToZip, options, function(err, zipfile) {
if(err) throw err
zipfile.readEntry()
zipfile.on("error", function(err) {
throw err
})
zipfile.on("entry", function(entry) {
if (/\/$/.exec(entry)) return false

zipfile.openReadStream(entry, options, (err, readStream) => {
if (err) throw err
readStream.on('data', data => {
console.log(entry.fileName)
console.log(data.toString())
})
})
zipfile.readEntry()
});
zipfile.once("end", function() {
console.log('END EVENT CALLBACK')
zipfile.close()
});
});

是否有内置方法可以将这些字符串(通过知道它们共享相同的文件名)连接到一个文件或字符串中,然后可以将其作为一个文件或字符串进行解析。

如果使用 substr) 方法,日志看起来像这样 console.log(data.toString().substr(0,10)) (因为我们只关心每个数据文件的前几个字符用于表示目的):

TH/CJM/CJM00083_en.xml
<hotel des
TH/CJM/CJM0007V_en.xml
<hotel des
TH/CJM/CJM0007V_en.xml
vel.com/HH
TH/CJM/YYY1RHVV_en.xml
<hotel des
TH/CJM/YYY1RHVV_en.xml
om/hotels/
TH/CJM/YYY0DJJ2_en.xml
<hotel des
TH/CJM/CJM0005P_en.xml
<hotel des

如日志所示,当数据被粉碎时,文件名会重复。

最佳答案

您应该等待'end' event被发射:

zipfile.openReadStream(entry, options, (err, readStream) => {
if (err) throw err;
var str = '';
readStream.on('data', data => {
str += data.toString();
});
readStream.on('end', function() {
console.log(entry.fileName);
console.log(str);
// Next entry...
zipfile.readEntry();
});
});

关于javascript - 在使用 Node 提取 zip 文件时将流式数据连接到单个文件或字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707303/

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