【问题标题】:HTML5 file upload feature detections in browser浏览器中的 HTML5 文件上传功能检测
【发布时间】:2011-06-10 09:23:06
【问题描述】:

我正在尝试使用 HTML5 功能上传文件。根据调查,我发现上传文件有 3 种不同的方式,

  1. 通过将文件编码为多部分:仅在支持文件阅读器时完成。
  2. 使用 XMLHTTP2(AJAX) 规范方法发送二进制数据:新方法 send(Blob/File) 能够通过网络发送二进制数据。
  3. FormData 对象:使用XMLHTTP(AJAX) send(FormData) 方法。

现在对于跨浏览器问题和功能检测,如下所示的 sn-p 很简单,

if(typeof FileReader == "undefined")

但是我不确定如何确定当前浏览器中 AJAX 的 send() 方法是否支持 send(FormData) or send(Blob/File) 方法实现。如何找到它?这里有 Object.property 技巧吗?还是有什么不同?

谢谢,

【问题讨论】:

  • 通过阅读规范,在我看来,如果 typeof FileReader != 'undefined' 支持 send(Blob/File),但这纯粹是猜测
  • 以上似乎是关于 FileReader 的吧? DataTranfer 对象在拖放中,但是我想知道如何检测 send(File),我们可以在其中以某种方式发现 AJAX 的 send() 方法是否支持 File 对象?

标签: javascript ajax html


【解决方案1】:

要处理二进制数据,您需要使用 WebSockets。这是新的HTML5 spec 的一部分。但是,有一个问题。截至 2010 年 12 月中旬,由于缓存中毒漏洞,所有主流浏览器都禁用了 WebSockets。

最后我听说这仍然是sorted out

要在通过 WebSockets 发送文件之前上传文件,您应该使用每个浏览器的最新版本支持的 FileReader API(据我所知)。

要检查是否支持 FileReader,您应该进行如下测试:

if (FileReader){
  // It's supported
}

您还可以检查:

if (window.URL){
  //
}

另一种选择。

【讨论】:

  • if( FileReader ) 在 Safari 中引发错误。但这适用于“如果(window.FileReader)”
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 2011-03-30
相关资源
最近更新 更多