2017-07-28 27 views
8

'a yüklerken soruyorum Dosyaları S3'e yüklemek için Evaporate.js kullanıyorum. Sunucu tarafı şifrelemeye karar verene kadar her şey çalışıyordum.Hatalı XMLHttpS3

S3 belgelerine göre, bir başlık ileterek etkinleştirebilirsiniz. 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

garip şey xAmzHeadersAtInitiate ayarlayabilirsiniz olduğu için '{x-amz-acl ': 'Kamu okunan'}' ve iyi çalışıyor. – Muhambi

+0

Bir nodejs uygulamasında bir modül olarak Evaporate.js kullanıyor musunuz veya tarayıcıdaki bir komut dosyasından mı kullanıyorsunuz? Bir tarayıcı kullanıyorsanız hangisini kullanıyorsunuz? –

cevap

6

Güncelleme:

Başlık alanları yalnızca olabilir ASCII karakterleri

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!!! 
      } 
     ) 

hata alıyorum: Ben gibi görünmek benim eklenti kodunu güncellendi. Kodunuzda x-amz-server-side-encryption gizli bir karakter içeriyor. Kopyalama yerine bir yere kopyalayın. Bu web page adresine gidin ve sorunuzdan kopyalandıktan sonra başlık alan adını yapıştırın, ne demek istediğimi göreceksiniz. documentation itibaren

:

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

Sen URL ile birlikte başlığını imzalamanız gerekiyor. URL’yi imzaladıktan sonra yalnızca başlıkların gönderilmesi işe yaramaz.

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

neden reddediyorsun? bilginizi dünya ile paylaşın :) –

+0

Cevabınız için teşekkürler, ancak yine de aynı hatayı alıyorum "Geçerli bir HTTP üstbilgi değeri değil"? – Muhambi

+1

"AES256" yerine "aws: kms" kullanmayı ve sonuçları paylaşmayı deneyebilir misiniz? Ayrıca, kepçelerinizin politikalarının bu üstbilgiye izin verdiğinden emin olun –