2013-03-21 104 views
1

我們一直在使用AWS SDK,其上傳/抓取文件的效果相當不錯,但我們碰到了一個問題。AWS PHP SDK版本2 S3文件名編碼問題

在S3中存儲了一個文件,它看起來像是被挖走了。 "/mefile/412501_413000/412604_-12%20C008%20Fil%20R[1].doc.gpg"

到目前爲止,SDK已經設法處理我們拋出的每個損壞的文件名。但是當我嘗試一個「doesObjectExist」時,我也得到了該文件的失敗。

$s3->doesObjectExist("mabucket","/mefile/412501_413000/412604_-12%20C008%20Fil%20R[1].doc.gpg")

總是會失敗。我嘗試從本地存儲上傳該文件,但也失敗了。我得到一個奇怪的例外: 「我們計算的請求籤名與您提供的簽名不匹配。請檢查您的密鑰和簽名方法。」

在使用「doesObjectExist」之前,是否需要對文件名進行編碼?它似乎已經處理了各種不好的文件名(空格/ UTF-8字符/ &等),所以我很困惑,爲什麼這不起作用。

UPDATE: 升級到最新的AWS SDK的PHP 2.2.1。運行在版本2.1.0,顯然有幾個錯誤。如果你在Ubuntu 10.04上,這有點粗糙。 (關於PHP版本升級的評論請點擊這裏:http://www.zalexblog.com/2011/01/07/installing-php-5-3-3-on-ubuntu-10-04/

回答

0

你可以試試html_entity_decode嗎?

$s3->doesObjectExist("mabucket",html_entity_decode("/mefile/412501_413000/412604_-12%20C008%20Fil%20R[1].doc.gpg")) 
+0

對不起沒有。我試過在php中的每個解碼:html_entity_decode,rawurldecode,urldecode。 – Stech 2013-03-21 21:22:34

+1

它可能是水桶的位置? https://github.com/tpyo/amazon-s3-php-class/issues/28#issuecomment-5723770 – 2013-03-21 21:31:54

+0

$配置=陣列( '鍵'=> '的-AWS密鑰', 「祕密'=>'the-aws-secret', 'region'=> Region :: US_EAST_1 ); 這是在默認情況下開始,但我給它一個鏡頭。還是行不通。 – Stech 2013-03-22 20:22:56