PHP - 从AWS桶下载的文件的文件编码问题

时间:2016-05-30 09:54:24

标签: php amazon-web-services amazon-s3 aws-sdk

在PHP中使用以下代码,我试图从AWS桶下载文件。 我能够成功下载文件,但下载的文件不可读。文件编码设置为ANSI。

在AWS存储桶中,此文件的元数据如下所示 Content-Type:text / csv;%20charset = utf-16le 内容编码:gzip



    require '/aws/aws-autoloader.php'; 
    use Aws\S3\S3Client;

    // Instantiate the S3 client with your AWS credentials
    $key = [access_key];
    $secret = [secret_key];

    $client = S3Client::factory(array(
        'credentials' => array(
            'key'    => $key,
            'secret' => $secret
        )
    ));


    $bucket = [bucket_name];
    $file=[bucket_file_location];
    $fileSaveAs = [download_file_location];

    // Get an object using the getObject operation & download file
    $result = $client->getObject(array(
        'Bucket' => $bucket,
        'Key'    => $file,
        'SaveAs' => $fileSaveAs
    ));

任何人都可以解释,这里有什么问题?

编辑1: 当我直接从AWS桶下载文件时,该文件可以很好地下载。

编辑2: 我刚刚注意到下载的CSV文件总是1KB大小。

下载文件损坏模式: `‹½”ÍJÃ@F¿µOÑPi+h]V[Tð§hâFÚ4HÐjI¬Ð—W¿¤

编辑3: 所有这些文件都是使用gsutil

从Google Play存储桶传输的

1 个答案:

答案 0 :(得分:1)

从AWS桶收到的文件是gzip。 (内容编码:gzip)

因此需要使用gzdecode函数

解码gzip压缩字符串

以下代码解决了问题



    $content = gzdecode(file_get_contents($fileSaveAs));
    file_put_contents($fileSaveAs,$content);