【问题标题】:S3 fails to unzip uploaded fileS3 无法解压上传的文件
【发布时间】:2015-09-30 18:07:57
【问题描述】:

我关注this example

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

// 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);
})

而且它“工作”的原因在于它完全按照预期执行所有操作,除了文件到达 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);
})

我很好奇我是否做错了什么,是否有一种自动方法让 S3 识别到文件正在压缩并解压缩?

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3 gzip


    【解决方案1】:

    它的工作方式是 s3 现在无需任何帮助即可知道文件已被 gzip 压缩。上传时需要在文件上设置元数据,告诉 S3 它已压缩。它会做正确的事情是这样设置的。

    上传时需要在对象元数据中设置Content-Encoding: gzipContent-Type: &lt;&lt;your file type&gt;&gt;

    后期编辑: 找到这些解释了如何为 Cloudfront 执行此操作,但基本相同:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html#CompressedS3
    http://www.cameronstokes.com/2011/07/20/compressed-content-amazon-s3-and-cloudfront/

    但是请注意,按照this blogpost S3 将提供 gzip 压缩的文件并依赖浏览器解压缩它。这在许多情况下都可以正常工作,但由于博主的笔记在 curl 中会失败(因为 curl 不知道如何处理 gzip 文件)。因此,如果您的目的是简单地上传文件供用户原始消费,那么最好的办法是跳过 gzip 并以未压缩状态上传文件。

    【讨论】:

    • 啊!非常好......但是将它与这种理解结合起来非常重要:nelsonslog.wordpress.com/2015/01/21/s3-vs-gzip-encoding。就我而言(我上传后卷曲文件头以验证它是否正确上传,并且比较总是失败 - 显然)。你介意我编辑你的答案以包含这个警告,然后我会给你绿色的复选标记。
    • 继续。我不介意我的答案是否有所改进:)
    • @GeniaS。实际上......如果你给 curl --compressed 选项,然后 curl 透明地撤消 gzipping(如果存在),并保存未压缩的响应。 stackoverflow.com/a/8365089/1695906
    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 2012-03-31
    • 2018-11-27
    • 2021-07-22
    • 1970-01-01
    • 2014-07-26
    • 2012-01-08
    • 1970-01-01
    相关资源
    最近更新 更多