File Uploader

File Uploader的前身是Ajax Upload。按照官方的说法,升级到FileUploader主要是添加了一些新的特性,修正了一些比较严重的错误。但在我这个使用者看来,二者最大的不同在于:File Uploader不在基于jQuery。另外,File Uploader也更加严格,例如返回值只能是JSON格式,等。Ajax Upload中一些需要写到后台服务器上的代码(如上传文件的格式筛选),或者对前端DOM的操作(如onSubmit、onComplete事件中自定义的代码等),都直接集成到了File Uploader的JS脚本中。总的说来,File Uploader是一款功能强大的JS文件上传插件,支持显示上传进度、文件拖拽到浏览器中上传、多文件上传、页面无刷新、无序多余插件、跨浏览器、跨后台语言等等特性。

官方网站如下:

http://valums.com/ajax-upload/

下载的文件目录结构如下图所示:

其中可供使用的是client目录和server目录下的若干文件:

client目录

fileuploader.js:主要JS脚本文件,前端的所有功能都在该脚本中实现。必需。使用时需要通过<script>标签导入到HTML文件中;

fileuploader.css:提供JS脚本中所需的CSS样式,主要包括按钮的样式、进度显示的样式以及上传结果的样式。必需。需要通过<link>标签导入HTML文件中;

loading.gif:进度显示所需的动态图片文件。必需。在fileuploader.css文件中被调用。

server目录

该目录提供的是服务器端代码的示例程序,包括:

基于Servlet实现的Java代码:OctetStreamReader.java

基于PHP的实现:php.php

基于Perl的实现:perl.cgi

三者择其一即可。

下面这段代码是前端对File Uploader最简单的调用:

[html] view plaincopy

  1. <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type"content="text/html; charset=utf-8" />
  5. <title>file uploader</title>
  6. <script type="text/javascript"src="fileuploader.js"></script>
  7. <link rel="stylesheet"type="text/css" href="fileuploader.css"/>
  8. <script type="text/javascript">
  9. window.onload = function() {
  10. new qq.FileUploader({
  11. element:document.getElementById("uploader"),
  12. action:"http://localhost/fileUpload/save.php",
  13. });
  14. }
  15. </script>
  16. </head>
  17. <body>
  18. <div id="uploader"></div>
  19. </body>
  20. </html>

前端的一般的步骤是:

1.      导入fileuploader.js、fileuploader.css脚本;

2.      实例化qq.FileUploader对象

qq.FileUploader的参数数组中包含如下属性:

element:加载FileUploader插件的DOM元素,通过DOM操作获取,通常是<div>,也可以是任何块级元素标签,如<span>、<p>等,必需;

action:服务器端接受并保存文件的程序路径,与<form>标签中的action属性类似,必需;

params:需要发送给服务器端的额外数据,key-value格式的数组,通过POST方法发送,格式如下:

params:  {

param1: “value1”,

param2: “value2”

}

allowedExtensions:允许上传的文件的后缀名数组,格式如下:

allowedExtensions:  [‘jpg’,  ‘gif’,  ‘bmp’,  ‘png’]

sizeLimit:上传文件大小的上限,单位为byte的数值(浏览器不一定支持本设置);

minSizeLimit:上传文件大小的下限,单位为byte的数值(浏览器同样不一定支持);

debug:是否使用浏览器的控制台打印File Uploader的调试信息,默认为false;

另外,参数数组中还包含了4个事件处理函数可供实现(非必需):

文件提交:onSubmit:  function(id,  fileName)  {}

正在上传:onProgress:  function(id,  fileName,  loaded,  total)  {}

上传完成:onComplete:  function(id,  fileName,  responseJSON)  {}

取消上传:onCancel:  function(id,  fileName)  {}

其中的参数:

id,表示是第几个上传的文件,从0开始计数;

fileName,表示上传的文件名称;

loaded,表示已经上传了的数据大小;

total,表示总共的文件大小;

responseJSON,表示返回的JSON数据。

参数数组中还包含了消息处理函数以及params的其它设置方法,不太常用,详情页参见官方文档。

后台服务器端如果想省事,可以直接使用server目录下的相应代码,或按照官方给的示例改写代码。

需要特别说明的是:

1.      加载FileUploader插件的DOM元素element,其样式在脚本中已经固定了,就算是在给element设置了新的样式也会被覆盖掉。如果想修改element的样式,需要在fileuploader.js的487行到491行(template处)以及对应的fileuploader.css样式中修改。

2.      同理,如果想修改进度显示的样式,需要在fileuploader.js的494行到500行(fileTemplate处)以及对应的fileuploader.css样式中修改。

3.      如果出现“increase post_max_size and upload_max_filesize to 10M”错误,需要在php.ini文件中把post_max_size和upload_max_filesize两项的值改到10M以上,然后重启Apache。

4.      FileUploader上传的文件数据信息,Java通过HttpServletRequest对象获取,并能直接从中抽取数据流,不用管索引值;而PHP则通过$_FILES数组获取,默认的索引值为“qqfile”,该索引值在fileuploader.js文件的964行与1197行指定,也可以在这些地方修改(虽然没有必要)。

5.      服务器端代码中设置文件保存路径的位置:PHP:php.php文件的第160行;Java:OctetStreamReader.java文件的第102行。

时间: 2024-10-28 20:49:45

File Uploader的相关文章

WebUploader插件上传大文件单文件和多文件JAVA版使用总结

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构Spring+struts2+mybatis+mysql 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

百度上传组件:webuploader

百度图片上传组件: 页面: <div class="upload"> <section> <article> <div class="wu-example"> <div id="fileList" class="uploader-list"></div> <span id="picker">上传出生证明</span&g

【ecmall】解决无法上传店铺logo和banner照片问题 (转)

问题描述:在ecmall个人用户登录,点击用户中心-店铺设置-更换店标,上传一个jpg图像(图像符合规范)后,不能预览,而且在页面底部点击提交后没有上传成功.banner店铺条幅也是一样的情况,还有下面的店铺简介中也无法上传图片.不光如此,上传了竟然还不能预览. 版本ecmall2.3.0 1.web上传文件原理 查看源码,发现ecmall上传文件是用JQuery+PHP的方式实现上传的,于是去搜这种方式的原理,解释如下. 首先明确,上传步骤是web浏览器先把文件传到服务器端,放在临时文件夹中的

web 文件上传组件 Plupload

Plupload官网:点击打开链接   建议下载最新版本,低版本会出现浏览器兼容问题. 最近公司有个项目需要在web端使用多文件上传功能,刚开始准备使用HTML5来做,但是IE9以下是都不支持的,于是想到了flash,在网上搜了下各种开源的组件,最后决定使用Plupload,下面来介绍一下该组件使用时遇到的一些问题以及解决方案. 先贴出配置参数: <script type="text/javascript"> // Initialize the widget when th

前端组件库

//来源:http://www.cnblogs.com/liuzhibin/p/5944821.html 0. 前端自动化(Workflow) 前端构建工具 Yeoman – a set of tools for automating development workflow gulp – The streaming build system grunt – the JavaScript Task Runner F.I.S – 前端集成解决方案 前端模块管理器 Bower – A package

百度 flash html5自切换 多文件异步上传控件webuploader基本用法

双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit"> 若页面需默认用ie兼容内核,增加标签:<meta name="renderer" content="ie-comp"> 若页面需默认用ie标准内核,增加标签

Plupload使用API

Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的<input type=”file” />.Plupload会自动侦测当前的环境,选择最合适的上传方式,并且会优先使用HTML5的方式.所以你完全不用去操心当前的浏览器支持哪些上传方式,Plupload会自动为你选择最合适的方式. 2.支持以拖拽的方式来选取要上传的文件 3.支持在前端压缩图片,即在图片文件还未上传之前就对它进行压缩 4.可以直接读取原生的文件数据,这样的好处就是例

一个异步文件上传的方式

不是我写的,我看了他的,思路很明确: 实现思路: 在js脚本中动态创建form,动态创建form中的内容,将文件上传的内容以隐藏域的方式提交过去,然后写好回调等. 感觉思路不难,但是我写不出来,感觉需要对于url,http有一定了解,js也ok才可. 代码: 上传的js: // JavaScript Document jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUpl

H5危险的文件上传对话框

文件对话框 文件上传对话框是一直以来就存在的网页控件. 到了 HTML5 时代,增加了更多的功能,例如支持文件多选.Chrome 甚至还支持「上传文件夹」这一私有特征: <input type="file" webkitdirectory /> 在给用户方便的同时,其安全隐患也逐渐出现.用户平时在下载时,理所当然的弹出的是保存对话框,因此常常不仔细看就做出了选择. 这极有可能被攻击者所利用.一些恶意网站在用户点击下载时,故意弹出一个上传对话框.只要用户一疏忽,就把选中的文件