您需要一个可以处理缓冲区的库。最新版本
adm-zip将:
npm install adm-zip
我的解决方案使用该
http.get方法,因为它返回Buffer块。
码:
var file_url = 'http://notepad-plus-plus.org/repository/7.x/7.6/npp.7.6.bin.x64.zip';var AdmZip = require('adm-zip');var http = require('http');http.get(file_url, function(res) { var data = [], dataLen = 0; res.on('data', function(chunk) { data.push(chunk); dataLen += chunk.length; }).on('end', function() { var buf = Buffer.alloc(dataLen); for (var i = 0, len = data.length, pos = 0; i < len; i++) { data[i].copy(buf, pos); pos += data[i].length; } var zip = new AdmZip(buf); var zipEntries = zip.getEntries(); console.log(zipEntries.length) for (var i = 0; i < zipEntries.length; i++) { if (zipEntries[i].entryName.match(/readme/)) console.log(zip.readAsText(zipEntries[i])); } });});
这个想法是创建一个缓冲区数组,并在最后将它们连接成一个新的缓冲区。这是因为无法调整缓冲区大小。
更新资料
这是一个更简单的解决方案,它
request通过
encoding:null在选项中进行设置,使用模块在缓冲区中获取响应。它还遵循重定向并自动解析http / https。
var file_url = 'https://github.com/mihaifm/linq/releases/download/3.1.1/linq.js-3.1.1.zip';var AdmZip = require('adm-zip');var request = require('request');request.get({url: file_url, encoding: null}, (err, res, body) => { var zip = new AdmZip(body); var zipEntries = zip.getEntries(); console.log(zipEntries.length); zipEntries.forEach((entry) => { if (entry.entryName.match(/readme/i)) console.log(zip.readAsText(entry)); });});
的
body响应的是,可以直接传递到缓冲器
AdmZip,简化了整个过程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)