File 通过node.js创建即时zip文件以供下载
我只需要使用NodeJS脚本实现以下设置(在不接触磁盘的情况下动态生成zip并响应客户端下载)。可以有人指导和张贴您的工作脚本。我尝试过谷歌搜索,似乎我们可以通过zipstream实现。但没有找到任何示例/工作脚本File 通过node.js创建即时zip文件以供下载,file,node.js,dynamic,zip,File,Node.js,Dynamic,Zip,我只需要使用NodeJS脚本实现以下设置(在不接触磁盘的情况下动态生成zip并响应客户端下载)。可以有人指导和张贴您的工作脚本。我尝试过谷歌搜索,似乎我们可以通过zipstream实现。但没有找到任何示例/工作脚本 从根文件夹中获取与*.xml文件匹配的文件 立即将http头写入客户端的http响应,表示这是下载,文件名为.zip zipstream写入zip容器的头字节 创建对S3中第一个映像的http请求 进入zipstream的管道(我们实际上不需要运行deflate,因为图像已经被压缩)
斯里尼瓦斯我也有同样的要求。。。从AmazonS3流式传输文件,动态压缩(在内存中),并通过node.js将其传送到浏览器。我的解决方案涉及使用和包,并将归档文件的字节传输到结果流 由于这是动态的,您不知道结果的归档大小,因此无法使用“内容长度”HTTP头。相反,您必须使用“传输编码:分块”标题 “分块”的缺点是你不会得到下载的进度条。我尝试将内容长度标题设置为近似值,但这仅适用于Chrome和Firefox;破坏档案;没有用Safari测试过
var http = require("http");
var knox = require("knox");
var archiver = require('archiver');
http.createServer(options, function(req, res) {
var zippedFilename = 'test.zip';
var archive = archiver('zip');
var header = {
"Content-Type": "application/x-zip",
"Pragma": "public",
"Expires": "0",
"Cache-Control": "private, must-revalidate, post-check=0, pre-check=0",
"Content-disposition": 'attachment; filename="' + zippedFilename + '"',
"Transfer-Encoding": "chunked",
"Content-Transfer-Encoding": "binary"
};
res.writeHead(200, header);
archive.store = true; // don't compress the archive
archive.pipe(res);
client.list({ prefix: 'myfiles' }, function(err, data) {
if (data.Contents) {
var fileCounter = 0;
data.Contents.forEach(function(element) {
var fileName = element.Key;
fileCounter++;
client.get(element.Key).on('response', function(awsData) {
archive.append(awsData, {name: fileName});
awsData.on('end', function () {
fileCounter--;
if (fileCounter < 1) {
archive.finalize();
}
});
}).end();
});
archive.on('error', function (err) {
throw err;
});
archive.on('finish', function (err) {
return res.end();
});
}
}).end();
}).listen(80, '127.0.0.1');
var http=require(“http”);
var knox=要求(“knox”);
var archiver=需要(“archiver”);
createServer(选项、函数(req、res){
var zip文件名='test.zip';
var archive=archiver('zip');
变量头={
“内容类型”:“应用程序/x-zip”,
“Pragma”:“public”,
“过期”:“0”,
“缓存控制”:“私有,必须重新验证,后检查=0,预检查=0”,
“内容处置”:“附件;文件名=“”+zippedFilename+”,
“传输编码”:“分块”,
“内容传输编码”:“二进制”
};
res.writeHead(200,页眉);
archive.store=true;//不要压缩存档
档案.管道(res);
client.list({prefix:'myfiles},函数(err,data){
if(data.Contents){
var fileCounter=0;
data.Contents.forEach(函数(元素){
var fileName=element.Key;
fileCounter++;
client.get(element.Key).on('response',function(awsData){
append(awsData,{name:fileName});
awsData.on('end',函数(){
文件计数器--;
if(文件计数器<1){
archive.finalize();
}
});
}).end();
});
archive.on('error',函数(err){
犯错误;
});
archive.on('finish',函数(err){
返回res.end();
});
}
}).end();
}).听(80,'127.0.0.1');
在chrome下,我得到的资源被解释为文档,但使用MIME类型的应用程序/x-zip进行传输
警告。