Plupload文件上传插件

所属分类:输入-上传

 207641  458  查看评论 (26)
分享到微信朋友圈
X
Plupload文件上传插件 ie兼容6

更新时间:2017-7-26 10:16:39

更新说明:版本更新到2.31版,修复下载文件错误问题


Plupload这个JavaScript控件可以让你选择Adobe Flash、Google Gears、HTML5、Microsoft Silverlight、Yahoo BrowserPlus或正常表单Form等多种方法进行文件上传。Plupload还提供其它功能包括:上传进度提醒、图片缩小、多文件上传,拖拽文件到上传控件,文件类型过滤和Chunked上传等。这些功能在不同的上传方式中支持情况会受到限制。

官网上有该控件的详细使用说明。以下贴出的只是根据项目需要所做的一些属性。

在页面上添加引用

<script type="text/javascript" src="../js/plupload.js"></script>
<script type="text/javascript" src="../js/plupload.gears.js"></script>(不需要可以去掉)
<script type="text/javascript" src="../js/plupload.silverlight.js"></script>(不需要可以去掉)
<script type="text/javascript" src="../js/plupload.flash.js"></script>(不需要可以去掉,我项目中需要用)
<script type="text/javascript" src="../js/plupload.browserplus.js"></script>(不需要可以去掉)
<script type="text/javascript" src="../js/plupload.html4.js"></script>(不需要可以去掉)
<script type="text/javascript" src="../js/plupload.html5.js"></script>(不需要可以去掉)
var uploader = new plupload.Uploader({
runtimes : 'flash',  //官网上默认是gears,html5,flash,silverlight,browserplus
browse_button : 'uploadify', //这个是点击上传的html标签的id,可以a,button等等
container: 'container', //这个是容器的地址,
max_file_size : '10mb', //这是文件的最大上传大小,得跟IIS结合使用
url : '/uploadhandler.aspx?' +'param1=value' , //服务器页面地址,后面跟你想传递的参数
flash_swf_url : '/js/plupload/plupload.flash.swf',  //flash地址
filters : [ {title : "网页文件", extensions : "htm,html"} ], //文件过滤

multipart:false // 官网的解释是设置传递到后台服务中的数据流结构,false的时候使用正常的字节流,如果为true,则使用mutlipart格式,可能是为了实现大附件分段上传的功能

如果设置了multipart:true,则你可以附加使用multipart_params参数去传递参数而不用像我这样通过在服务地址后面加参数。还有一些其他的属性,诸如chunk_size,resize(该属性能压缩图片,所以该控件对图片上传很有好处,推荐使用)可以查看官网的文档。如果你想简单的传递附件然后浏览,最好设置multipart:false,因为当你设置为true之后,你在后台中获取的流格式会有点问题,我本人的经验就是使用了true上传了一个html文档到数据库后,用

Response.ContentType = "text/html";
Response.BinaryWrite(body);
Response.Flush();
Response.Close();
Response.End();

这种方式查看附件时,直接打开的HTML页面会掺杂一些未能解析的流信息。

//文件添加时,会在容器里显示待上传的文件列表

uploader.bind('FilesAdded',
function(up, files) {
	for (var i in files) {
		$('filelist').innerHTML += '
' + files[i].name + ' (' + plupload.formatSize(files[i].size) + ')
';
	}
});

//文件上传的进度

uploader.bind('UploadProgress',
function(up, file) {
	$(file.id).getElementsByTagName('b')[0].innerHTML = '' + file.percent + "%";
});

//文件上传成功后的总计

uploader.bind('UploadComplete',
function(up, files) {
	$('filelist').innerHTML = "您选择的文件已经全部上传,总计共" + files.length + "个文件";
});

// 这是一个选择完成后的上传按钮。点击按钮后,附件才开始上传

$('ibtMultiSubmit').onclick = function() {
	uploader.start();
	return false;
};
uploader.init();

后台服务页面的代码:

网上有人使用这种方式:

Byte[] buffer = null;
if (Request.ContentType == "application/octet-stream" && Request.ContentLength > 0) {
	buffer = new Byte[Request.InputStream.Length];
	Request.InputStream.Read(buffer, 0, buffer.Length);
} else if (Request.ContentType.Contains("multipart/form-data") && Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) {
	buffer = new Byte[Request.Files[0].InputStream.Length];
	Request.Files[0].InputStream.Read(buffer, 0, buffer.Length);
}

来获取附件内容,我基本也是借鉴他的,获取参数就使用Request.Params["param1"]即可。

获取到后,做自己的业务处理即可。

使用该控件时遇到的唯一问题就是multipart:为true和false时,获取的流不同。并且它貌似不像uploadify那样提供动态获取参数的功能,所以如果某些想要传递到后台的参数不是页面初始化时设定的,可以考虑变换方式,比如在设置好参数的时候,触发事件再次初始化控件即可。该控件除了对IE6不支持,其他浏览器都支持得挺好。


相关插件-上传

图片预览上传插件bootstrap-fileinput.js

bootstrapfileinput预览上传图片并使用FmData上传,上传url根据实际情况填写
  上传
 85843  494

zyupload图片上传修改版V2.0

在原zyupload基础上增加了放大,删除,目录选择功能 。同时修改了原作者中的删除图片后该图片不能再次上传的BUG
  上传
 55281  374

手机端实现多图片上传预览

HTML+CSS+原生JS实现手机端实现多图片上传,选中图片后,可以点击放大(有一定的注释,在PC,ipad,IOS和安卓上都测试过)
  上传
 34518  313

jQuery多图上传

jQuery多图图片上传.net后端以写好,直接使用
  上传
 80593  464

讨论这个项目(26)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    no-name-human 0
    2019/5/9 10:02:27
    ie9要是可以获取文件大小就更完美了 回复
    7??lin 、 0
    2018/7/31 10:26:52
    ios微信端拍照上传图片名重复,安卓则正常,怎么破解? 回复
    Soar 0
    2018/7/18 15:06:48
    没有未丑化压缩的版本么? 回复
    裕达 0
    2018/1/28 16:05:14

    微信上传选择不了照片,关闭了文件上传限制又可以,但是怎么兼容?

    回复
    不正 0
    2017/12/21 16:12:17
    will_gardner 0
    2017/10/30 17:02:02

    有时候能分割上传,有时候不能,为什么啊?

    回复
    三毛 0
    2017/10/20 10:25:57

    我问一下,问什么点击选择文件,谷歌浏览器下大约等待3秒呢?不是立即弹出选择文件框的

    回复
    举杯し独醉"_ 0
    2017/8/21 14:41:41
    如何上传0KB的文件呢?使用的时候添加0KB的文件,无法触发FilesAdded事件 回复
    举杯し独醉"_ 0
    2017/8/21 14:39:31
    如何上?文0kb的文件呢?使用的?候,添加0Kb的文件?,?法狱办FilesAdded事件 回复
    . 0
    2017/8/4 15:14:47
    上传不上gif 后缀的动图如xxx.png 但他实际是gif 生成base64 失败怎么处理
        .0
        2017/8/4 15:15:06

        不是gif后缀

    回复
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复