2017-07-28 85 views
8

我正在使用Evaporate.js上傳文件到S3。我已經使所有的工作,直到我決定啓用服務器端加密。上傳到S3時出現XMLHttpRequest錯誤

根據S3文檔,您可以通過傳遞標題來啓用它。所以,我更新了我的代碼添加到看起來像:

var promise = _e_.add({ 
      name: name, 
      file: files[i], 
      started: callback_methods.started, 
      complete: callback_methods.complete, 
      cancelled: callback_methods.cancelled, 
      progress: callback_methods.progress, 
      error: callback_methods.error, 
      warn: callback_methods.warn, 
      paused: callback_methods.paused, 
      pausing: callback_methods.pausing, 
      resumed: callback_methods.resumed, 
      nameChanged: callback_methods.nameChanged, 
      xAmzHeadersAtInitiate: { 'x-amz-server-side​-encryption': 'AES256'} // THIS IS THE ONLY LINE THAT CHANGED!!! 
      } 
     ) 

我得到的錯誤:DOMException: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'AWS4-HMAC-SHA256 Credential=XXXXXXXXXXXXXXX/XXXXXXX/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-server-side​-encryption, Signature=XXXXXXXXXXXXXXXXXXXXX' is not a valid HTTP header field value.

+0

奇怪的是我可以設置xAmzHeadersAtInitiate爲'{ 'X-AMZ-ACL': '公衆閱讀的'}',它工作正常。 – Muhambi

+0

您是否將Evaporate.js用作nodejs應用程序中的模塊,或者您是否使用了瀏覽器中的腳本?如果一個瀏覽器,你正在使用哪一個? –

回答

6

更新:

頭字段只能是ASCII字符。代碼中的x-amz-server-side-encryption包含隱藏字符。輸入它而不是從某處粘貼它。去這個web page並複製你的問題後粘貼標題字段名稱,你會明白我的意思。

documentation

You can't enforce whether or not objects are encrypted with SSE-S3 when they are uploaded using pre-signed URLs.

您需要的URL一起簽署了頭。簽署網址後發送標題將不起作用。

var promise = _e_.add({ 
    name: name, 
    file: files[i], 
    started: callback_methods.started, 
    complete: callback_methods.complete, 
    cancelled: callback_methods.cancelled, 
    progress: callback_methods.progress, 
    error: callback_methods.error, 
    warn: callback_methods.warn, 
    paused: callback_methods.paused, 
    pausing: callback_methods.pausing, 
    resumed: callback_methods.resumed, 
    nameChanged: callback_methods.nameChanged, 
    signHeaders: { 'x-amz-server-side-encryption': 'AES256' }, // notice this 
    xAmzHeadersAtInitiate: { 'x-amz-server-side-encryption': 'AES256'} // this should be fine now as we have the header in the signed request too but try removing this if you still get an error. S3 does not require you to re-specify the headers that were already signed. 
}); 
+1

爲什麼downvote?與世界分享您的知識:) –

+0

感謝您的答案,但是我仍然得到相同的錯誤「不是一個有效的HTTP頭值」? – Muhambi

+1

您可以嘗試使用'aws:kms'而不是'AES256'並分享結果嗎?此外請確保您的存儲桶cors政策允許此標題 –

相關問題