附件上传的一个插件介绍--- plupload
来源:互联网 发布:打印纸品牌 知乎 编辑:程序博客网 时间:2024/05/29 13:13
选择js篇章。
最近在公司发行的封装的一个附件组件,前段js框架使用的是plupload,业余时间自己了解了下这个技术,已经就开门见山,说说这个上传插件。
plupload很强大。
Plupload有以下功能和特点:
1、拥有多种上传方式:HTML5、flash、silverlight以及传统的<input type=”file” />。Plupload会自动侦测当前的环境,选择最合适的上传方式,并且会优先使用HTML5的方式。所以你完全不用去操心当前的浏览器支持哪些上传方式,Plupload会自动为你选择最合适的方式。
2、支持以拖拽的方式来选取要上传的文件
3、支持在前端压缩图片,即在图片文件还未上传之前就对它进行压缩
4、可以直接读取原生的文件数据,这样的好处就是例如可以在图片文件还未上传之前就能把它显示在页面上预览
5、支持把大文件切割成小片进行上传,因为有些浏览器对很大的文件比如几G的一些文件无法上传。
使用步骤:
第一步 引用js插件:
<script src="${pageContext.request.contextPath}/js/plupload-2.1.9/js/plupload.full.min.js"></script><script src="${pageContext.request.contextPath}/js/jquery-1.11.1.js"></script>
第二步 设置上传的按钮或者dom:
<p><button id="browse">选择文件</button><button id="start_upload">开始上传</button></p>
对应的js:
//实例化一个plupload上传对象var uploader = new plupload.Uploader({browse_button : 'browse', //触发文件选择对话框的按钮,为那个元素idurl : '${pageContext.request.contextPath}/fileUpload/upload', //服务器端的上传页面地址drop_element : 'div',flash_swf_url : 'js/Moxie.swf', //swf文件,当需要使用swf方式进行上传时需要配置该参数silverlight_xap_url : 'js/Moxie.xap' //silverlight文件,当需要使用silverlight方式进行上传时需要配置该参数});//在实例对象上调用init()方法进行初始化uploader.init();
第三步 与后台交互的事件触发:
//最后给"开始上传"按钮注册事件window.document.getElementById('start_upload').onclick = function() {uploader.start(); //调用实例对象的start()方法开始上传文件,当然你也可以在其他地方调用该方法}
第四步 后台的实现:
*所使用的技术是springMVC
@RequestMapping(value = "/upload")public void upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response)throws IOException {InputStream inputStream = file.getInputStream();System.out.println("开始");String path = request.getSession().getServletContext().getRealPath("upload");String fileName = file.getOriginalFilename();// String fileName = new Date().getTime()+".jpg";System.out.println(path);response.getWriter().write("aa:bb");}
默认的值是file,当然可以在前端进行自定义。
关于上传过程中一系列的监听事件:
例如 上传结束后触发的事件:
uploader.bind('FileUploaded', function(uploader,file,responseObject) {alert("upload...");console.log(file);console.log(responseObject);console.log("aaaa");});
接下来详细介绍API:
参数属性
mime_types:用来限定上传文件的类型,为一个数组,该数组的每个元素又是一个对象,该对象有title和extensions两个属性,title为该过滤器的名称,extensions为文件扩展名,有多个时用逗号隔开。该属性默认为一个空数组,即不做限制。
max_file_size:用来限定上传文件的大小,如果文件体积超过了该值,则不能被选取。值可以为一个数字,单位为b,也可以是一个字符串,由数字和单位组成,如'200kb'
prevent_duplicates:是否允许选取重复的文件,为true时表示不允许,为false时表示允许,默认为false。如果两个文件的文件名和大小都相同,则会被认为是重复的文件
filters完整的配置示例如下(当然也可以只配置其中的某一项):
filters: { mime_types : [ //只允许上传图片和zip文件 { title : "Image files", extensions : "jpg,gif,png" }, { title : "Zip files", extensions : "zip" } ], max_file_size : '400kb', //最大只能上传400kb的文件 prevent_duplicates : true //不允许选取重复文件}
true
时将以multipart/form-data
的形式来上传文件,为false时则以二进制的格式来上传文件。html4上传方式不支持以二进制格式来上传文件,在flash上传方式中,二进制上传也有点问题。并且二进制格式上传还需要在服务器端做特殊的处理。一般我们用multipart/form-data的形式来上传文件就足够了。multipart_params: { one: '1', two: '2', three: { //值还可以是一个字面量对象 a: '4', b: '5' }, four: ['6', '7', '8'] //也可以是一个数组}
plupload.HTTP_ERROR
错误时的重试次数,为0时表示不重试"200kb"
。当该值为0时表示不使用分片上传功能width:指定压缩后图片的宽度,如果没有设置该属性则默认为原始图片的宽度
height:指定压缩后图片的高度,如果没有设置该属性则默认为原始图片的高度
crop:是否裁剪图片
quality:压缩后图片的质量,只对jpg格式的图片有效,默认为90。quality
可以跟width
和height
一起使用,但也可以单独使用,单独使用时,压缩后图片的宽高不会变化,但由于质量降低了,所以体积也会变小
preserve_headers:压缩后是否保留图片的元数据,true
为保留,false
为不保留,默认为true
。删除图片的元数据能使图片的体积减小一点点
resize参数的配置示例如下:
resize: { width: 100, height: 100, crop: true, quality: 60, preserve_headers: false}
name
,值为生成的文件名。silverlight,
html4用来指定上传方式,指定多个上传方式请使用逗号隔开。一般情况下,你不需要配置该参数,因为Plupload默认会根据你的其他的参数配置来选择最合适的上传方式。如果没有特殊要求的话,Plupload会首先选择html5上传方式,如果浏览器不支持html5,则会使用flash或silverlight,如果前面两者也都不支持,则会使用最传统的html4上传方式。如果你想指定使用某个上传方式,或改变上传方式的优先顺序,则你可以配置该参数。
file
,例如在php中你可以使用$_FILES['file']
来获取上传的文件信息browse_button
的父元素。该参数的值可以是一个元素的id,也可以是DOM元素本身。事件说明
Init
监听函数参数:(uploader)
uploader
为当前的plupload实例对象
监听函数参数:(uploader)
uploader
为当前的plupload实例对象
监听函数参数:(uploader,option_name,new_value,old_value)
uploader
为当前的plupload实例对象,option_name
为发生改变的参数名称,new_value
为改变后的值,old_value
为改变前的值
监听函数参数:(uploader)
uploader
为当前的plupload实例对象
监听函数参数:(uploader)
uploader
为当前的plupload实例对象
监听函数参数:(uploader,file)
uploader
为当前的plupload实例对象,file
为触发此事件的文件对象
监听函数参数:(uploader,file)
uploader
为当前的plupload实例对象,file
为触发此事件的文件对象
监听函数参数:(uploader)
uploader
为当前的plupload实例对象
监听函数参数:(uploader,file)
uploader
为当前的plupload实例对象,file
为触发此事件的文件对象
监听函数参数:(uploader,files)
uploader
为当前的plupload实例对象,files
为一个数组,里面的元素为本次事件所移除的文件对象
监听函数参数:(uploader,file)
uploader
为当前的plupload实例对象,file
为触发此事件的文件对象
监听函数参数:(uploader,files)
uploader
为当前的plupload实例对象,files
为一个数组,里面的元素为本次添加到上传队列里的文件对象
监听函数参数:(uploader,file,responseObject)
uploader
为当前的plupload实例对象,file
为触发此事件的文件对象,responseObject
为服务器返回的信息对象,它有以下3个属性:
response:服务器返回的文本
responseHeaders:服务器返回的头信息
status:服务器返回的http状态码,比如200
监听函数参数:(uploader,file,responseObject)
uploader
为当前的plupload实例对象,file
为触发此事件的文件对象,responseObject
为服务器返回的信息对象,它有以下5个属性:
offset:该文件小片在整体文件中的偏移量
response:服务器返回的文本
responseHeaders:服务器返回的头信息
status:服务器返回的http状态码,比如200
total:该文件(指的是被切割成了许多文件小片的那个文件)的总大小,单位为字节
监听函数参数:(uploader,files)
uploader
为当前的plupload实例对象,files
为一个数组,里面的元素为本次已完成上传的所有文件对象
监听函数参数:(uploader,errObject)
uploader
为当前的plupload实例对象,errObject
为错误对象,它至少包含以下3个属性(因为不同类型的错误,属性可能会不同):
code:错误代码,具体请参考plupload上定义的表示错误代码的常量属性
file:与该错误相关的文件对象
message:错误信息
监听函数参数:(uploader)
uploader
为当前的plupload实例对象
实例属性
plupload.STARTED
或plupload.STOPPED
,该值由Plupload实例的stop()
或statr()
方法控制。默认为plupload.STOPPED
详细介绍:http://www.cnblogs.com/Janejxt/p/5391714.html 转自姜小七的填坑之旅,在此特别感谢。
源码下载地址:
https://www.oschina.net/news/73850/plupload-v2-1
plupload的使用说明:
http://chaping.github.io/plupload/doc/#plupload_doc1
- 附件上传的一个插件介绍--- plupload
- plupload附件上传插件IE8问题
- plupload插件限制上传一个文件的方法
- 多附件上传控件plupload的使用心得
- 上传插件 plupload使用说明
- Plupload上传插件使用
- plupload上传插件绑定事件的两种方法
- plupload上传插件绑定事件的两种方法
- 上传plupload的使用
- plupload一个前端上传组件
- Plupload上传插件详解,多实例上传
- plupload上传插件多图片上传操作
- 自己扩展TinyMCE的上传附件插件
- plupload插件结合struts上传文件
- plupload上传插件在SpringMVC中的整合
- Plupload文件,图片等上传插件
- PLUpload文件上传的使用
- plupload插件的简单使用
- Asynchronous I/O 是什么?
- Linux的原子操作与同步机制
- (22)赋值运算符、递增和递减运算符
- 反转链表(非递归)
- 关于grub rescue的使用的记录
- 附件上传的一个插件介绍--- plupload
- Win8系统安装ArcGis Server的过程
- mysql5.7.16 Windows与Ubuntu的安装、导入数据与编码乱码问题。
- 10.31 NOIP模拟赛(morning)
- 语法基础-01java程序运行原理
- Java构造器与继承
- [bzoj 1879] [Sdoi2009]Bill的挑战:状压DP,自创数学公式(?)
- 1116. Come on! Let's C (20)
- Javascript 二维数组去重