【问题标题】:How do I upload a gzip object to s3?如何将 gzip 对象上传到 s3?
【发布时间】:2017-08-03 10:38:49
【问题描述】:

我正在创建一个 gzip 字符串并将其作为对象上传到 s3。但是,当我从 s3 下载相同的文件并使用 gunzip 在本地解压缩时,出现此错误:gunzip: 111.gz: not in gzip format 当我查看从 s3 下载的文件中返回的 mime_content_type 时,它​​设置为:application/zlib

这是我正在运行以生成 gzip 文件并将其推送到 s3 的代码:

for($i=0;$i<=100;$i++) {
    $content .= $i . "\n";
}

$result = $this->s3->putObject(array(
   'Bucket' => 'my-bucket-name',
   'Key'    => '111.gz',
   'Body'   => gzcompress($content),
   'ACL' => 'authenticated-read',
   'Metadata' => [
       'ContentType' => 'text/plain',
       'ContentEncoding' => 'gzip'
   ]
));

奇怪的是,如果我在将 gzip 内容发送到 s3 之前在本地查看 gzip 内容,我能够将其解压缩并查看原始字符串。所以我必须错误地上传文件,有什么想法吗?

【问题讨论】:

    标签: php amazon-web-services amazon-s3 gzip compression


    【解决方案1】:

    根据http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject,ContentType 和 ContentEncoding 参数属于顶层,而不是 Metadata。所以你的电话应该是这样的:

    $result = $this->s3->putObject(array(
       'Bucket' => 'my-bucket-name',
       'Key'    => '111.gz',
       'Body'   => gzencode($content),
       'ACL' => 'authenticated-read',
       'ContentType' => 'text/plain',
       'ContentEncoding' => 'gzip'
    ));
    

    此外,通过将 ContentType 设置为 text/plain 您的文件可能会在出现空字节时被截断。如果您在解压缩文件时仍有问题,我会尝试使用“application/gzip”。

    【讨论】:

    • 应该是 gzencode($content) 而不是 gzcompress($content)。 gzencode 将添加必要的标头数据以制作正确的 gzip 存档。
    • 加一个 gzencode() 代替。提供 ContentType 和 ContentEncoding 时也会出现问题。删除这些属性对我来说效果最好,AWS 会自动从标头中选择正确的类型和编码。
    【解决方案2】:

    我有一个非常相似的问题,使其适用于我们的文件的唯一方法是使用这样的代码(根据您的示例略有更改):

    $this->s3->putObject(array(
        'Bucket' => 'my-bucket-name',
        'Key'    => '111.gz',
        'Body'   => gzcompress($content, 9, ZLIB_ENCODING_GZIP),
        'ACL' => 'public-read',
        'ContentType' => 'text/javascript',
        'ContentEncoding' => 'gzip'
    ));
    

    相关部分是gzcompress($content, 9, ZLIB_ENCODING_GZIP),因为如果没有最后一个ZLIB_ENCODING_GZIP 参数,AWS S3 将无法识别文件,也无法以正确的格式提供文件。

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 2019-06-13
      • 2021-07-22
      • 2017-09-04
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      相关资源
      最近更新 更多