Jestem PUTting plików do S3 przez żądania ajax i około 50% czasu dostaję błędy ERR_CONNECTION_RESET.ERR_CONNECTION_RESET, gdy PUTting do S3
Wiem, że wnioski są poprawnie podpisane - wszelkie pomysły, które mogą być przyczyną tego problemu? Ponownie, jest to sporadyczny problem, który widzę z wielu lokalizacji i maszyn.
Oto odpowiedni kod coffeescript, którego używam, aby umieścić moje pliki w S3. Pochodzi z pracy Micah Roberson i Rok Krulec pod numerem http://micahroberson.com/upload-files-directly-to-s3-w-backbone-on-heroku/ i http://codeartists.com/post/36892733572/how-to-directly-upload-files-to-amazon-s3-from-your.
createCORSRequest: (method, url) ->
xhr = new XMLHttpRequest()
if xhr.withCredentials?
xhr.open method, url, true
else if typeof XDomainRequest != "undefined"
xhr = new XDomainRequest()
xhr.open method, url
else
xhr = null
xhr
uploadToS3: (file, signature) ->
this_s3upload = this
this_s3upload.signature = signature
url = signature.signed_request
xhr = @createCORSRequest 'PUT', decodeURIComponent(signature.signed_request)
if !xhr
@onError 'CORS not supported'
else
xhr.onload =() ->
if xhr.status == 200
this_s3upload.onProgress 100, 'Upload completed.'
this_s3upload.onFinishS3Put file, this_s3upload.signature
else
this_s3upload.onError file, 'Upload error: ' + xhr.status
xhr.onerror =() ->
this_s3upload.onError file, 'XHR error.', this_s3upload.signature
xhr.upload.onprogress = (e) ->
if e.lengthComputable
percentLoaded = Math.round (e.loaded/e.total) * 100
if percentLoaded == 100
message = "Finalizing"
else
message = "Uploading"
this_s3upload.onProgress xhr, file, percentLoaded, message, this_s3upload.signature
xhr.onabort = ->
this_s3upload.onAbort file, "XHR cancelled by user.", this_s3upload.signature
xhr.setRequestHeader 'Content-Type', file.type
xhr.setRequestHeader 'x-amz-acl', 'public-read'
xhr.send file
Aktualizacja
byłem już bardzo profesjonalną obsługę z Amazon w tej sprawie. Zgodnie z ich sugestią utworzyłem instancję EC2 Windows, załadowałem na nią przeglądarkę Chrome i próbowałem przesłać 5 plików 10 razy z moim kodem. Nie widziałem błędu raz. Od czasu do czasu pojawiały się błędy SignatureDoesNotMatch, ale nie występował jeden błąd ERR_CONNECTION_RESET. Nadal widzę błędy ERR_CONNECTION_RESET na każdym innym kliencie/lokalizacji, z której korzystam.
Aktualizacja Nadal nie ma rozwiązania tutaj. Przeniosłem się z użycia samoczynnego algorytmu podpisywania do algorytmu dostarczonego przez boto. Brak wpływu na problem ERR_CONNECTION_RESET.
Jeśli ktoś inny ma ten sam problem, byłbym wdzięczny wiedząc, że nie jestem sam. ;) – Erik
Mam ten sam problem! Używam tego samego zestawu zasobów (bloga i kodu modelu) i mam dokładnie taki sam wynik. Mniej więcej w połowie przypadków żądanie daje ERR_CONNECTION_RESET bez żadnych innych informacji. –
Dzięki Joan. Mam aktywne pytanie z AWS, ale wymaga to ode mnie powtórzenia kodu przeglądarki jako autonomicznego procesu do ich debugowania - co wymaga pewnego rozwoju. – Erik