2016-05-30 82 views
1

在PHP中使用以下代碼時,我試圖從AWS存儲桶下載文件。 我能夠成功下載文件,但下載的文件不可讀。文件編碼設置爲ANSI。PHP - 從AWS存儲桶下載的文件存在文件編碼問題

在AWS鬥此文件的元數據如下 內容類型:文本/ 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

+0

大概內容,你得到的是gziped(作爲'內容編碼說')? 'gzdecode(file_get_contents($ fileSaveAs))'返回正確的內容嗎? – Zudwa

+0

是的這解決了我的問題 – Pankaj

回答

0

從AWS桶接收的文件的gzip玩鬥。 (內容編碼:gzip)

所以需要使用gzdecode功能gzip壓縮的字符串解碼

下面的代碼解決了問題



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

+0

@Zudwa:感謝您的解決方案 – Pankaj