2017-07-28 11 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': 'public-read'}'に設定でき、うまく動作します。 – 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と一緒にヘッダーに署名する必要があります。 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

'AES256'の代わりに 'aws:kms'を使ってみて、結果を共有できますか?また、あなたのバケツcorsポリシーがこのヘッダーを許可していることを確認してください –

関連する問題