विफल रहता है मैं आरईएसटी एपीआई और एचटीएमएल 5 फ़ाइल स्लाइसिंग का उपयोग करके अमेज़ॅन एस 3 में एक बड़ी फाइल (1.5 जीबी) अपलोड करने की कोशिश कर रहा हूं। यहाँ कैसे अपलोड कोड (पठनीयता के लिए नीचे छीन कोड) की तरह लग रहा है:अमेज़ॅन एस 3 कॉर्स पुट
File.prototype.slice = File.prototype.webkitSlice || File.prototype.mozSlice || File.prototype.slice;
var length = u.settings.chunk_size; // 6MB
var start = chunk * length;
var end = Math.min(start + length, u.file.size);
var xhr = new XMLHttpRequest();
var path = "/" + u.settings.key;
path += "?partNumber=" + chunk + "&uploadId=" + u.upload_id;
var method = "PUT";
var authorization = "AWS " + u.settings.access_key + ":" + signature;
var blob = u.file.slice(start, end);
xhr.upload.addEventListener("progress", progress_handler, true);
xhr.addEventListener("readystatechange", handler, true);
xhr.addEventListener("error", error_handler, true);
xhr.addEventListener("timeout", error_handler, true);
xhr.open(method, u.settings.host + path, true);
xhr.setRequestHeader("x-amz-date", date);
xhr.setRequestHeader("Authorization", authorization);
xhr.setRequestHeader("Content-Type", u.settings.content_type);
xhr.setRequestHeader("Content-Disposition", "attachment; filename=" + u.file.name);
xhr.send(blob);
chunk_size
6MB है। एक खंड के बाद अपलोड करने के बाद, अगला अगला अनुसरण करता है, और इसी तरह। लेकिन कभी-कभी (हर 80 भाग या तो), PUT
अनुरोध e.type == "error"
, e.target.status == 0
(जो मुझे आश्चर्य करता है) के साथ विफल रहता है, और e.target.responseText == ""
। एक खंड विफल होने के बाद, कोड इसे अपलोड करने का प्रयास करता है, और एक ही त्रुटि प्राप्त करता है। जब मैं पृष्ठ को रीफ्रेश करता हूं और अपलोड जारी रखता हूं (वही हिस्सा!), यह एक आकर्षण की तरह काम करता है (80 टुकड़ों के लिए या तो, जब यह फिर से अटक जाता है)। यहाँ कैसे अनुरोध क्रोम देव उपकरणों में दिखाई देता है:
कोई भी विचार यह क्यों होना चाहिए, या कैसे कुछ इस तरह डिबग करने के लिए?
संपादित करें:
हाँ, आदर्श रूप से आप अनुरोध पर हस्ताक्षर करेंगे जैसे कि आप उन्हें शुरुआत में एक बार में भेज रहे हैं। –
@RyanParman हाँ, यह सही है, लेकिन मेरी लाइब्रेरी जेएस में है और मुझे हस्ताक्षर सर्वर-साइड उत्पन्न करने की आवश्यकता है, और मैं सर्वर को कम अनुरोध करता हूं। –
आह, गोचा। हाँ, यह एक फर्क पड़ता है। :) –