使用JavaScript和Google Gears处理文件上传,是否有更好的解决方案?

6

所以 - 我已经使用这种文件上传方法一段时间了,但似乎Google Gears对实现HTML5规范的新浏览器支持不佳。我听说过“deprecated”这个词在一些渠道上流传,因此我正在寻找一个可以完成以下任务并支持新浏览器的替代品。我总是可以退回到gears /标准文件POST,但以下项目使我的流程更加简单:

  1. 用户必须能够在对话框中选择多个文件进行上传。
  2. 必须能够接收有关文件传输状态的更新。(进度条)
  3. 我想使用PUT请求而不是POST
  4. 我希望能够使用JavaScript轻松地将这些事件附加到现有的HTML元素上。也就是说,文件选择应该在<button>点击时触发。
  5. 我希望能够使用JavaScript轻松地控制响应/请求参数。
我不确定新的HTML5浏览器是否支持桌面/请求对象,这是gears使用的,或者是否有一个Flash上传程序具有我在谷歌搜索中错过的这些功能。
使用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请求,因此我将其更改为“喜欢”而不是“必须”。


http://www.element-it.com/multiple-file-upload/flash-uploader.aspx 是一个SWF控件,适用于您想要完成的操作。 - Todd Moses
似乎在ActionScript 3中,PUT仅适用于AIR应用程序。 - Todd Moses
1
我在Firefox 3.6的HTML5文件API上进行了相当多的尝试,它非常接近成功。唯一我无法可靠地完成的是通过XMLHttpRequest获取PUT的状态更新 - 它声称有xhr.upload.onprogress,但我从未看到在xhr.send(file)之后触发它... PUT似乎普遍不受支持,这真是遗憾。 - gnarf
2
Plupload是最新的上传插件之一,它使用了目前可用的最佳方法(HTML 5、Flash、Gears、Silverlight):http://www.plupload.com/。 - janmoesen
@janmoesen - 我最终选择了plupload - 如果你想写一个回答而不是评论,我会接受它 :) - gnarf
显示剩余2条评论
2个回答

1

1
(根据提问者的建议,从原问题的评论中产生。)
Plupload是最新的上传组件之一,它使用了目前可用的最佳方法(HTML 5、Flash、Gears、Silverlight):http://plupload.com/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接