`
子衿青青
  • 浏览: 109400 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用HTML5实现多文件上传

 
阅读更多

在Dojo1.6中有一个崭新的Multi-File Uploader (dojox.form.Uploader),它具有一个可定制样式的file input按钮,可使用多文件选择模式,且完全基于HTML元素。在不支持HTML5的浏览器中,该控件可以自动切换到使用Flash或者iframe。

原文:The New HTML5 Multi-File Uploader

作者:Mike Wilcox

难度: 初学者

Dojo版本: 1.6

入门

File input之所以叫file input是因为它是一个标准的input元素,且其type属性被设置为"file"。很多年以来,file input一次只能选择并上传单个文件。在新的HTML5规范中为input元素添加了多选模式。当然,不同浏览器对于规范的实现一直以来都不尽相同。比如,Firefox3.6和WebKit以及Firefox4.0就不同。或许你已经猜到了,IE并没有实现HTML5中多文件上传这一功能...甚至IE9也没有实现。

!dojox.form.Uploader相对于dojox.form.FileUploader做出了很多改进,并将取代后者。由于新的dojox.form.Uploader在Mozilla和Webkit浏览器下并不适用Flash,因此许多由于使用Flash而引起的问题得到了规避。Dojo 1.6之后不再会继续对于dojox.form.FileUploader提供维护,但是该控件代码会一直保留到Dojo 2.0之前。

为了应付Dojo开发者需要面对的各种情况, 真正的“上传功能”其实是由插件实现的。离开了这些插件,Uploader的代码允许对file input进行样式定制,并在不支持HTML5的浏览器中通过为每一个文件的选择添加一个新的file input元素来实现多文件的选择。这所有的一切只需要为一个普通的file input添加dojoType属性:

上述代码将会生成一个使用你所选择的Dijit样式的上传文件按钮。这里我们默认使用Claro主题:


注意,若是要使用Ajax来上传文件的话,你还需要一个Uploader插件,之后我会说明这一点。

除了使用Ajax上传文件,这个Uploader也可能被放在一个form表单中直接上传文件。使用时记得将你的form表单的enctype属性设置为multipart/form-data,该属性是用来上传文件的。

上述代码的结果如下:

需要重复的是,不使用插件的话,你需要自己实现真正的文件上传部分。

尽管上一个例子可以上传多个文件,但并没有可视化界面告诉你到底选择了哪些文件。为此,dojo还提供了dojox.form.uploader.FileList这个帮助控件。该帮助控件可以被绑定到一个dojox.form.Uploader控件上,这样它就可以自动侦测哪些文件被选择或是移除又或是上传并实时地在界面上将对应状态表示出来。在使用Ajax上传时,该控件还提供一个内置的进度条来显示上传进度。

!注意, FileList有一个自定义属性指向所要绑定的Uploader控件,如上述代码中11行所示。

结果如下:

插件

Uploader有种插件可以用来处理Ajax上传。HTML5插件通过Gecko(Firefox)和WebKit(Safari,Chrome)浏览器中file input的新类型来实现上传。在IE下你有两种选择:IFrame插件或是Flash插件。这两个插件并没有任何新的东西,实质上它们重用了以前的FileUploader中的代码,并进行了简化。

IFrame和Flash插件扩展了HTML5插件,因此你不需要在你的项目中同时导入两者。如你所想的那样,只有当你在开发一个不用兼容IE的项目时(你太幸运了!)才会单独使用HTML5插件。

在之前的例子中,页面在递交时会通过post方式来将页面信息传递给UploadFile.php。如果我们需要使用Ajax来实现的话,只需要导入IFrame和Flash插件之一即可:

如果你不希望在IE下使用Flash的话,你可以使用IFrame插件:

等一下,之前的例子使用的是简单的form表单,并没有使用任何插件;而现在用的这些插件是为了在IE下运行Ajax上传的,所谓的HTML5插件到底在哪里?

如我之前所说的,Flash和IFrame插件扩展了HTML5插件,因此它已经被包含在这两个插件里并会自动工作。不过如果你确信你不会使IE...甚至是IE9这样不支持HTML 5表单功能的浏览器的话,你可以用以下方式直接使用HTML5插件:

不管是哪种方式,一切都会被自动处理。当按下“Submit”按钮时,Uploader将会阻断onsubmit事件,因此页面不会进行跳转,之后它会从action属性中获取URL信息,并收集form表单中的数据传递到服务器端。

结论

得益于几年在FileUploader上的工作经验,我才能将这个新的Uplaoder做的简单易用、功能齐备。之前在FileUploader上的工作曾因为Flash插件在除了IE之外的浏览器上表现并不是那么变得很难维护。尽管FileUploader跑起来没有大问题,但在与Dijit Tabs或是Dijit Dialog等控件一起使用时还是经常会有一些诡异bug。现在有了HTML5的新功能,Firefox和WebKit下新的Multi-File Input得以有效的工作,同时由于这都是原生的HTML元素,也不会有任何渲染问题。





分享到:
评论

相关推荐

    php 使用html5实现多文件上传实例

    在现代Web开发中,HTML5引入了许多新特性,其中一项是多文件上传功能。这个功能通过`<input type="file">`元素的`multiple`属性得以...以上就是关于PHP使用HTML5实现多文件上传的基本知识和实例,希望对你有所帮助。

    HTML5实现多文件上传

    总结起来,HTML5的多文件上传功能结合FileReader API和适当的JavaScript处理,能够实现用户友好的文件上传体验。在实际项目中,还需要考虑服务器端的配合以及各种安全策略,以确保文件上传功能的完整性和安全性。

    使用layui实现多文件列表上传

    在“使用layui实现多文件列表上传”这个项目中,主要涉及到了layui的文件上传功能,这在网页应用中是非常常见且实用的功能,尤其对于需要用户提交多份文件的场景。 首先,layui的文件上传组件是基于HTML5的File API...

    应用HTML5表单属性实现多文件上传

    例如,我们可以使用 multiple 属性来实现多文件上传,使用 required 属性来实现不能为空的文件上传,使用 autocomplete 属性来实现文件输入框的自动完成功能,使用 placeholder 属性来实现文件输入框的提示功能,...

    java多文件上传实现

    通过以上步骤,可以实现一个完整的Java多文件上传功能,包括使用Flash显示上传进度条,并将文件信息存储到MySQL数据库。在实际开发中,根据具体需求进行调整和优化,确保功能的稳定性和安全性。

    Ext3.0实现多文件上传.rar

    在“Ext3.0实现多文件上传.rar”这个压缩包中,我们聚焦于一个特定的功能:使用Ext3.0来实现实时的多文件上传功能。这个功能通常在网页应用中用于让用户能够一次性上传多个文件,如图片、文档等,极大地提高了用户...

    flash 实现的多文件上传

    标题中的“Flash实现的多文件上传”指的是使用Adobe Flash技术来实现用户在Web页面上同时上传多个文件的功能。Flash在过去的网页开发中被广泛应用于多媒体交互和富互联网应用(RIA),其中包括文件上传功能,因为它...

    java使用uploadify插件实现多文件上传完整demo

    Uploadify是一款流行的JavaScript插件,它使得在前端实现文件上传变得更加便捷,并且支持多文件选择、进度显示、取消上传等特性。本教程将详细介绍如何在Java环境中利用Uploadify插件实现这些功能。 1. **Uploadify...

    html5文件上传插件

    HTML5文件上传插件是一种基于Web技术实现的前端交互组件,它允许用户在网页上方便地上传文件到服务器,尤其适用于后台文件管理、图片展示、多媒体资源上传等场景。随着HTML5技术的发展,文件上传功能得到了显著提升...

    javascript+HTML5 多文件上传(插件)多进度条显示

    在本项目中,"javascript+HTML5 多文件上传(插件)多进度条显示"是一个实现这一功能的实例,它允许用户选择并上传多个文件,并在上传过程中实时显示每个文件及整体的上传进度。下面将详细介绍这个技术实现的关键...

    html5实现多图片上传预览(源码,已测试)

    在这个“html5实现多图片上传预览(源码,已测试)”的项目中,我们主要关注的是HTML5的新特性——File API和拖放API,它们允许我们在不借助服务器端处理的情况下实现本地文件的读取和预览。 首先,File API是HTML5...

    在ASP.NET中实现多文件上传(示例源码)

    这可以实现文件上传的进度显示,无需刷新整个页面。 总的来说,在ASP.NET中实现多文件上传涉及到前端的HTML控件、后端的服务器处理以及可能的客户端验证。理解这些步骤并正确实现它们是构建健壮、安全的文件上传...

    .net MVC 实现多文件上传,显示上传进度条,可传多个文件

    在.NET MVC框架中,实现多文件上传并展示上传进度条是一项常见的需求,这不仅可以提高用户体验,还能让用户了解文件上传的状态。下面将详细讲解如何通过WebUploader插件来实现这一功能。 1. **WebUploader简介** ...

    基于bootstrap.3的文件上传效果, 可拖拽上传、预览的HTML5文件上传插件.zip

    标题中的“基于Bootstrap.3的文件上传效果, 可拖拽上传、预览的HTML5文件上传插件.zip”指的是一个使用Bootstrap 3框架和HTML5技术实现的高级文件上传功能。这个插件允许用户通过拖放操作上传文件,并且在上传前可以...

    Python - Flask 使用Ajax 实现多文件上传

    在Python的Web开发框架Flask中,实现多文件上传是一个常见的需求。这通常涉及到前端页面与后端服务器的交互,而Ajax技术可以帮助我们实现实时、无刷新的上传过程。以下将详细介绍如何在Flask中利用Ajax实现多文件...

    HTML5实现多文件图片预览上传实例代码

    在HTML5中,实现多文件图片预览和上传的功能是通过结合File API、FormData对象以及Ajax技术来完成的。这个实例代码正是展示了如何利用这些特性创建一个用户友好的图片上传体验。 首先,我们需要理解HTML5中的File ...

    HTML5+WebSocket实现多文件同时上传的实例

    【WebSocket实现多文件上传】 WebSocket是一种在客户端与服务器之间建立长连接的协议,它可以提供双向通信,即服务器和客户端都可以随时发送数据。这使得实时交互应用如文件上传变得更为高效。结合HTML5的新特性,...

    java实现多文件异步上传

    在前端部分,我们主要依赖于HTML5中的`FormData`对象以及jQuery库来实现文件的异步上传。 ##### HTML结构 ```html <!-- 文件输入框 --> <!-- 按钮用于触发上传动作 --> ();">test ``` 这里定义了三个文件...

Global site tag (gtag.js) - Google Analytics