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

时间:2010-02-18 21:00:52

标签: javascript html flash file-upload google-gears

所以 - 我一直在使用这种文件上传方法,但似乎Google Gears对实现HTML5规范的新浏览器支持不足。我听说过几个频道上的 deprecated 这个词,所以我正在寻找能够完成以下任务并支持新浏览器的替代品。我总是可以回到齿轮/标准文件POST,但这些以下项目使我的过程更加简单:

  1. 用户必须,以便能够在对话框中选择多个文件进行上传。
  2. 必须能够接收有关文件传输的状态更新。 (进度条)
  3. 我希望能够使用PUT次请求代替POST
  4. 我希望能够使用JavaScript轻松地将这些事件附加到现有HTML元素。 I.E.应在<button>点击时触发文件选择。
  5. 我希望能够使用JavaScript轻松控制响应/请求参数。
  6. 我不确定新的HTML5浏览器是否支持桌面/请求对象齿轮使用,或者是否有一个闪存上传器具有我在谷歌搜索中缺少的这些功能。

    使用齿轮上传代码的示例:

    // 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请求,因此我将其更改为“喜欢”而不是“必须”。

2 个答案:

答案 0 :(得分:1)

我之前使用过基于Flash的内容,例如http://www.webresourcesdepot.com/open-source-flash-uploader-multi-bit-shift/。它们工作正常,只依赖闪存应该适用于大多数计算机。我没有找到一种可靠的方法来单独使用js,但可以用js控制flash - 特别是如果你自己编写。

希望这会有所帮助。

答案 1 :(得分:1)

(根据原始问题的评论,根据艾克斯的建议产生。)

Plupload是该块中最新的孩子之一,它使用了最好的方法(HTML 5,Flash,Gears,Silverlight):http://plupload.com/