2017-08-03 13 views
0

私はgzip文字列を作成し、オブジェクトとしてs3にアップロードしています。しかし、私はこのエラーを取得S3から同じファイルをダウンロードし、gunzipを使用してローカルにそれを解凍する場合:gunzip: 111.gz: not in gzip format私はmime_content_typeを見てみると、それは次のように設定されているS3からダウンロードしたファイルに返さ:application/zlibgzipオブジェクトをs3にアップロードするにはどうすればよいですか?

ここで私はコードがあります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に送信する前に、私はそれを解凍し、元の文字列を見ることができるだということです。だから私は間違ってファイルをアップロードする必要があります、任意の思考?

答えて

1

http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobjectによると、ContentTypeおよびContentEncodingパラメータはトップレベルに属し、メタデータには属しません。だからあなたの呼び出しは次のようになります。

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

また、それはNULLバイトが発生するたびに、あなたのファイルが切り捨てられる可能性がある無地/テキストにContentTypeをを設定することでいる可能性があります。私はwith'application/gzip 'を試してみましょう。まだファイルを解凍していない場合は問題ありません。

+0

gzencode($ content)ではなくgzcompress($ content)でなければなりません。 gzencodeは適切なgzipアーカイブを作成するために必要なヘッダデータを追加します。 – Ben

関連する問題