【发布时间】:2012-09-19 07:05:57
【问题描述】:
我正在尝试使用 REST Api 和 HTML5 文件切片将一个大文件 (1.5GB) 上传到 Amazon S3。以下是上传代码的样子(为了便于阅读,代码被剥离):
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 块左右,当它再次卡住时)。以下是请求在 chrome 开发工具中的外观:
任何想法为什么会发生这种情况,或者如何调试这样的事情?
编辑:这是OPTIONS 回复:
【问题讨论】:
标签: javascript html amazon-s3 xmlhttprequest cors