Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js S3无法解压缩上载的文件_Node.js_Amazon Web Services_Amazon S3_Gzip - Fatal编程技术网

Node.js S3无法解压缩上载的文件

Node.js S3无法解压缩上载的文件,node.js,amazon-web-services,amazon-s3,gzip,Node.js,Amazon Web Services,Amazon S3,Gzip,我在跟踪 它的“工作原理”是,它完全按照预期完成所有工作,除了文件到达S3压缩并保持这种状态 据我所知,S3上没有自动解压功能,因此,如果您打算上传公开可用的图像或视频(或最终用户只需消费的任何其他内容),解决方案似乎会让上传的文件像这样解压 // Load the stream var fs = require('fs'), zlib = require('zlib'); var body = fs.createReadStream('bigfile');//.pipe(zlib.create

我在跟踪

它的“工作原理”是,它完全按照预期完成所有工作,除了文件到达S3压缩并保持这种状态

据我所知,S3上没有自动解压功能,因此,如果您打算上传公开可用的图像或视频(或最终用户只需消费的任何其他内容),解决方案似乎会让上传的文件像这样解压

// Load the stream
var fs = require('fs'), zlib = require('zlib');
var body = fs.createReadStream('bigfile');//.pipe(zlib.createGzip()); <-- removing the zipping part

// Upload the stream
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body}, function(err, data) {
  if (err) console.log("An error occurred", err);
  console.log("Uploaded the file at", data.Location);
})
//加载流
var fs=require('fs'),zlib=require('zlib');

var body=fs.createReadStream('bigfile');/。管道(zlib.createGzip()) 其工作方式是,s3现在可以在没有任何帮助的情况下知道该文件是gzip文件。上传时需要在文件上设置元数据,告诉S3它是gzip。它会做正确的事情,这是设置

上传时需要在对象元数据中设置
内容编码:gzip
内容类型:

稍后编辑: 找到了这些解释如何为Cloudfront执行此操作的方法,但基本相同:


但是请注意,根据S3,将为gzip文件提供服务,并依赖浏览器对其进行解压缩。这在很多情况下都很好,但正如blogger所指出的,curl将失败(因为curl不知道如何处理gzip文件)。因此,如果您只是想上传一个文件供用户原始使用,那么最好的办法就是跳过gzip并以未压缩状态上传文件。

AH!杰出的但将其与这种理解结合起来是非常重要的:。在我的例子中(我在上传后卷曲文件头以验证它是否正确上传,并且比较总是失败——很明显)。你介意我把你的答案编辑成包含这个警告,然后我给你绿色的复选标记。继续吧。我不介意我的答案是否有所改进:)@GeniaS。事实上如果为curl提供了
--compressed
选项,则curl将透明地撤消gzip(如果存在),并保存未压缩的响应。
// Load the stream
var fs = require('fs'), zlib = require('zlib');
var body = fs.createReadStream('bigfile');//.pipe(zlib.createGzip()); <-- removing the zipping part

// Upload the stream
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body}, function(err, data) {
  if (err) console.log("An error occurred", err);
  console.log("Uploaded the file at", data.Location);
})