2013-08-20 54 views
5

我想使用FineUploader的新功能,允許直接上傳到亞馬遜s3。目前,我無法上傳照片。我收到錯誤: 「無效的政策文檔或請求標題!」接收無效的政策文件或請求標題錯誤當使用fineuploader亞馬遜s3

開發人員要求將問題發佈到此處的計算器上。

我下面這個網頁上的說明:

http://blog.fineuploader.com/2013/08/16/fine-uploader-s3-upload-directly-to-amazon-s3-from-your-browser/#guide

在設置的東西了,我也效仿掛在那裏的示例文件: https://github.com/Widen/fine-uploader-server/blob/master/php/s3/s3demo.php

我有我的javascript成立因此有很少的選擇:

$('#fineuploader-s3').fineUploaderS3({ 
      request: { 
       endpoint: "http://thenameofmybucket.s3.amazonaws.com", 
       accessKey: 「mypublicaccesskey」 
      }, 

      signature: { 
       endpoint: "s3demo.php" 
      }, 

      iframeSupport: { 
       localBlankPagePath: "/success.html" 
      }, 

     cors: { 
       expected: true 
      } 
    }); 

我知道有很多p鞋帶可能會出現這種情況。我從來沒有使用s3或fineuploader,所以很抱歉,如果這些都是愚蠢的問題。但是,這裏是我在設置時感到最困惑的地方。我有一種感覺問題出在#1:

(1)在本例中的javascript,這是怎麼簽名的路徑設置:

// REQUIRED: Path to our local server where requests can be signed. 
      signature: { 
     endpoint: "/s3/signtureHandler" 
      }, 

我不知道這意味着是一個空文件,其中創建了一些json,或者它應該指向創建json的函數的php腳本,在我的情況下是s3demo.php,我直接複製它。

(2)在s3demo.php文件,我改變了只系是這些:

$clientPrivateKey = $_SERVER['I put my private key here']; 

$expectedBucket = "http://thenameofmybucket.s3.amazonaws.com"; 

function handlePreflightedRequest() { 
    // If you are relying on CORS, you will need to adjust the allowed domain here. 
    header('Access-Control-Allow-Origin: http://mywebsitename.org'); 
} 

(3)這是我有我的CORS文件,我不知道這是否是就是因爲這個教學頁面上的例子不包括標籤:

<CORSRule> 
     <AllowedOrigin>http://mywebsitename.org</AllowedOrigin> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 

(4)中的說明詳細,我走進IAM面板,並創造了從完全說明覆制策略組,但用我的水桶的實際名稱:

{ 
    "Version":"2012-10-17", 
    "Statement":[{ 
    "Effect":"Allow", 
    "Action":"s3:PutObject", 
    "Resource":"arn:aws:s3:::thenameofmybucket/*」 
    }] 
} 

,然後是一個用戶,我從中分別獲得了javascript和php文件中使用的公共和私人訪問密鑰。用戶名在腳本中的任何地方都沒有專門使用。

我希望有一些事情真的很明顯,我在這裏做的不對。謝謝你的時間。

+1

回答問題(1)。 'signature.endpoint'選項應該指向php腳本。 –

回答

2

如果我理解正確,當您嘗試簽署簡單上載請求時,您會看到「無效的策略文檔...」消息客戶端。您也使用提供的PHP服務器端示例的s3demo.php

我看到您的更改最大的問題是$expectedBucket變量。您的存儲桶不是「http://thenameofmybucket.s3.amazonaws.com」,它是「mybucket的名稱」。很可能,服務器端代碼拒絕該策略,因爲當我確定您的存儲桶事實上被命名爲「thenameofmybucket」時,它預計存在名爲「http://thenameofmybucket.s3.amazonaws.com」的存儲桶。將該行更改爲$expectedBucket = "thenameofmybucket";

另外,根據你的問題,你不清楚你在哪裏存儲你的客戶端密鑰。如果你的密鑰是「12345」,你是否有一行代碼看起來像這樣?

$clientPrivateKey = $_SERVER['12345'];

如果是這樣,這是你的服務器端代碼中的另一個問題。 PHP中的超全局變量$_SERVER正在尋找名爲「12345」的環境變量,可能包含您的密鑰。如果你還沒有設置這樣一個變量,那麼要麼這樣做,要麼,可能只需將$clientPrivateKey的值設置爲你的密鑰。

另外,你真的在​​這裏的跨源環境工作嗎?它看起來不像你。如果是這樣,你不需要在PHP示例中標記爲「CORS」或「交叉源」或「跨域」的任何東西。

UPDATE:
你也應該設置$expectedMaxSize全局null如果你不設置上上傳任何大小限制的限制。我們現在正在更新PHP example for Fine Uploader S3,並進行一些改進和澄清,以便在未來幫助其他人。

+0

感謝您捕捉所有這些錯誤。我更改了$ expectedBucket,並用我的密鑰修復了代碼行。但是我仍然遇到同樣的錯誤,所以我猜還有其他問題。 –

+0

@EBlair現在一切正常嗎? –

+0

謝謝你問 - 不幸的是,沒有。我是否需要從php示例中刪除一些與CORS相關的代碼? –