所以 - 我已经使用这种文件上传方法一段时间了,但似乎Google Gears对实现HTML5规范的新浏览器支持不佳。我听说过“deprecated”这个词在一些渠道上流传,因此我正在寻找一个可以完成以下任务并支持新浏览器的替代品。我总是可以退回到gears /标准文件POST,但以下项目使我的流程更加简单:
- 用户必须能够在对话框中选择多个文件进行上传。
- 我必须能够接收有关文件传输状态的更新。(进度条)
- 我想使用
PUT
请求而不是POST
- 我希望能够使用JavaScript轻松地将这些事件附加到现有的HTML元素上。也就是说,文件选择应该在
<button>
点击时触发。 - 我希望能够使用JavaScript轻松地控制响应/请求参数。
使用gears上传代码的示例:
// select some files:
var desktop = google.gears.factory.create('beta.desktop');
desktop.openFiles(selectFilesCallback);
function selectFilesCallback(files) {
$.each(files,function(k,file) {
// this code actually goes through a queue, and creates some status bars
// but it is unimportant to show here...
sendFile(file);
});
}
function sendFile(file) {
google.gears.factory.create('beta.httprequest');
request.open('PUT', upl.url);
request.setRequestHeader('filename', file.name);
request.upload.onprogress = function(e) {
// gives me % status updates... allows e.loaded/e.total
};
request.onreadystatechange = function() {
if (request.readyState == 4) {
// completed the upload!
}
};
request.send(file.blob);
return request;
}
编辑: 显然Flash不能使用PUT请求,因此我将其更改为“喜欢”而不是“必须”。
PUT
的状态更新 - 它声称有xhr.upload.onprogress
,但我从未看到在xhr.send(file)
之后触发它...PUT
似乎普遍不受支持,这真是遗憾。 - gnarf