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

Posted

技术标签:

【中文标题】使用 JavaScript 和 Google Gears 处理文件上传,有更好的解决方案吗?【英文标题】:Handling file uploads with JavaScript and Google Gears, is there a better solution? 【发布时间】:2011-01-18 12:40:24 【问题描述】:

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

    用户必须能够在对话框中选择要上传的多个文件。 我必须能够接收有关文件传输的状态更新。 (进度条) 我希望能够使用PUT 请求而不是POST 我希望能够使用 javascript 轻松地将这些事件附加到现有的 HTML 元素。 IE。文件选择应在<button> 点击时触发。 我希望能够使用 JavaScript 轻松控制响应/请求参数。

我不确定新的 HTML5 浏览器是否支持齿轮使用的桌面/请求对象,或者是否存在具有这些我在 google 搜索中缺少的功能的 Flash 上传器。

使用齿轮上传代码示例:

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

【问题讨论】:

只是插话:Firefox 3.6 支持 HTML5 文件 API。在 FF 3.6 中打开此页面进行演示 :) demos.hacks.mozilla.org/openweb/FileAPI element-it.com/multiple-file-upload/flash-uploader.aspx 是一个 SWF 控件,用于您想做的事情。 @Todd Moses - 看起来不错,但 99 美元的价格标签让我看到了 swfupload,这些都不支持 PUT 请求,我可能不得不解决这个问题......(我很确定在 flash/flex 中只是缺少对 PUT 的支持) 我在 Firefox 3.6 HTML5 文件 API 上玩了很多次,结果非常接近。我唯一不能可靠地做的是通过XMLHttpRequest获取PUT的状态更新——它声称有xhr.upload.onprogress,但我从未见过它在xhr.send(file)之后被解雇...@987654334 @ 似乎通常不受支持,这是一种耻辱。 Plupload 是最新的孩子之一,它使用最好的方法(HTML 5、Flash、Gears、Silverlight):plupload.com 【参考方案1】:

(根据提问者的建议,源自对原始问题的评论。)

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

【讨论】:

【参考方案2】:

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

希望这会有所帮助。

【讨论】:

以上是关于使用 JavaScript 和 Google Gears 处理文件上传,有更好的解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 的 Google 大查询

使用Javascript从Google Places搜索api获取纬度和经度

javascript 使用JS和Google Analytics进行表单跟踪

如何使用 Google Cloud 功能和 MQTT 桥接器更新设备配置

javascript [jQuery]使用JS和Google Analytics进行表单跟踪

使用 javascript 获取 google 联系人