2011-05-13 78 views
3

我使用亞馬遜S3服務的PHP使用此API
https://github.com/tpyo/amazon-s3-php-class
我傳遞的URL,客戶端這樣的
下載時更改爲原始文件名?

https://domain.s3.amazonaws.com/bucket/filename_11052011111924.zip?AWSAccessKeyId=myaccesskey&Expires=1305311393&Signature=mysignature 

因此,當客戶點擊或URL粘貼到瀏覽器中,該文件下載的文件名爲filename_11052011111924.zip.But我的原始文件名存儲在數據庫中。

所以有可能在將URL單獨傳遞給客戶端時下載,並用原始文件名下載。我不確定這是否會對我有幫助。

Content-Disposition: attachment; filename=FILENAME.EXT 
Content-Type: application/octet-stream 
+0

重複這個問題,看它的答案。 ** [LINK](http://stackoverflow.com/questions/2611432/amazon-s3-change-file-download-name)** – 2011-05-13 09:06:10

回答

1

我不認爲這會工作(我從來沒有嘗試過)。您可能需要先將文件下載到您的服務器,稍後再使用標題,一旦完成(或稍後使用某個bot或cron),您可以刪除文件。

此方法將使用您的帶寬。

+0

這是不正確的。您可以使用原始問題中的標題來設置'下載文件名'。看到我的答案。 – 2011-05-13 16:25:36

+0

@Geoff;謝謝你的信息。正如我在我的評論中寫的,我從來沒有嘗試過,當然他們的類/ API可以帶來解決方案,就像你的答案一樣。現在我們該怎麼聯繫他?他接受我的答案作爲解決方案,而有辦法做到這一點。 – Revenant 2011-05-13 21:08:38

6

如果您將文件上載到S3時設置了標題,能夠以原始文件名下載文件。 (您也可以在S3中對現有文件進行設置 - 請參閱AWS文檔)

我不確定您的庫是否支持此功能,但您可以使用AWS S3 SDK來完成此操作。

喜歡的東西(我不知道這樣的PHP檢查語法):

// Instantiate the class 
$s3 = new AmazonS3(); 

$response = $s3->create_object('bucket', 'filename_11052011111924.zip', array(
    'fileUpload' => 'filename.zip', 
    'contentType' => 'application/octet-stream', 
    'headers' => array(// raw headers 
     'Content-Disposition' => 'attachment; filename=filename.zip', 
    ), 
)); 

更新

您也可以在每次生成一個新的URL時間調整某些頭。見http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/get_object_url

$url = $s3->get_object_url('bucket', 'filename_11052011111924.zip', '5 minutes', array(
    'response' => array(
      'Content-Disposition' => 'attachment; filename=filename.zip' 
    ) 
)); 
0

是的,你可以告訴AWS輸出文件必須命名方式:

注:我們編碼的文件名!

$filename = "Here we can have some utf8 chars.ext"; 
$outputFileName = '=?UTF-8?B?' . base64_encode($filename) . '?='; 
$url = $s3->get_object_url(
    'bucket_name', 
    'path_to_the_file.ext', 
    '5 minutes', 
    array(
     'response' => array(
      'content-disposition' => 'attachment;' . " filename=\"" . $outputFileName . "\";") 
    ) 
    ) 
);