plupload+artdialog实现多平台文件上传
背景:本来项目中使用的前端文件上传控件是uploadify,一切相安无事了一段时间后。现场传来”喜讯“,客户要用ipad使用系统,还想上传图片。客户老爷一拍脑门,研发就要加班加点。大家知道uploadify是依赖flash的,所以在ios,mac系统上都不行。于是,经过一番google,找到了plupload。上手比较简单。
页面html代码:
head标签中包含必要的js文件
<script type="text/javascript" src="js/jquery-1.9.1.min.js" ></script> <!-- art dialog --> <script type="text/javascript" src="artdialog/artDialog.source.js?skin=blue"></script> <!-- plupload --> <script type="text/javascript" src="plupload/plupload.full.js"></script>
body标签中的页面元素
<!-- 触发弹出框 --> <a id="uploadBtn" class="optionbtn inline" href="#">文件上传</a> <div id="uploadContent" class="" style="display:none;height:300px;overflow-x:hidden;overflow-y:auto;"><div id="choosefile"><span>单个文件支持小于100M</span><br/><a id="uploadify" href="javascript:void(0);">选择文件</a></div> <div id="uploadfileQueue" style="border: 1px solid #a7c5e2;height: 228px;width: 350px;"></div> </div>
<pre id="console"></pre>
script标签中的代码
var globalUploader; function _plupload(){ var uploader = new plupload.Uploader({runtimes : 'html5,flash,silverlight,html4',browse_button: 'uploadify', //页面上浏览文件的DOM对象的id属性container: 'uploadContent',//包含browse_button的divurl: '/uploadAction!localUpload.action',//接收文件上传的actionflash_swf_url : '/folder/js/plupload/Moxie.swf',silverlight_xap_url : '/folder/js/plupload/Moxie.xap',filters : {max_file_size : '100mb',//限制上传文件大小mime_types: [//限制上传文件类型{title : "Image files", extensions : "jpg,gif,png"}]},init: {PostInit: function() {$('#uploadfileQueue').html('');},UploadFile : function(up,file){//BeforeUpload后触发 },BeforeUpload : function(up,file){//点击按钮后上传前触发,此处可以做查询同名文件,检查剩余空间等操作//检查是否有重名文件,有则直接在文件名末尾加个括号和数字以示区分 $.ajax({url:"/folder/personal/personalAction!getNewFileName.action",type:"POST",async:false,data:{'upFileName' : file.name, 'globalPid' : globalPid},dataType:"json",success:function(data){//上传前设置参数up.setOption('multipart_params', {upFileName : data.newFileName, upFileType : file.name.split(".")[file.name.split(".").length - 1],//后缀 upFileSize : file.size,parentId : globalPid});},error:function(XMLHttpRequest, textStatus, errorThrown){messageAlert("对不起,文件["+file.name+"]上传准备失败",''); // $('#uploadify').uploadify('cancel',file.id);//按id取消某个上传任务 }});},FileFiltered: function(up, file){//选择文件后触发 },FilesAdded: function(up, files) {//文件添加到队列中var i = 0;//记录文件列表编号,删除用plupload.each(files, function(file) {$('#uploadfileQueue').html($('#uploadfileQueue').html() + '<div id="' + file.id + '" class="uploadify-queue-item"><div class="cancel"><a href="javascript:_plupload_removeFile('+i+','+file.id+')"></a></div><span class="fileName">' + file.name + ' (' + plupload.formatSize(file.size) + ')</span><b></b><div class="uploadify-progress"><div class="uploadify-progress-bar"></div></div></div>');i ++;});},UploadProgress: function(up, file) {//点击开始上传后触发,此处可以添加进度条,利用file.percentdocument.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>-' + file.percent + "%</span>";//百分比$('#' + file.id).find('.uploadify-progress-bar').css('width', file.percent + '%');//进度条 },Error: function(up, err) {//出错触发document.getElementById('console').innerHTML += "\n错误 #" + err.code + ": " + err.message;},FileUploaded: function(up, file, info) {//一个文件上传完触发// Fires when a file is successfully uploaded.data = eval( "(" + info.response + ")" );//服务器返回的数据,此处可以修改页面上的文件列表等 },UploadComplete: function(up, files){//所有文件上传完触发//Fires when all files in a queue are uploaded. }}});uploader.init();globalUploader = uploader; } function popUpDialog(){artDialog({id: 'file-upload',title: '文件上传',fixed: true,lock: true,content: $("#uploadContent")[0],button:[{name: '开始上传',focus:true,callback: function(){globalUploader.start();return false;}},{name: '关闭',callback: function(){$('#uploadfileQueue').html('');//删掉上传队列的内容globalUploader.files.splice(0,globalUploader.files.length);//清除上传队列中的内容return true;}}],close: function(){$('#uploadfileQueue').html('');//删掉上传队列的内容globalUploader.files.splice(0,globalUploader.files.length);//清除上传队列中的内容 }}); } $(function(){$('#uploadBtn').click(function(){popUpDialog();});_plupload(); });
后台代码就不写了,我用的struts2后台action中使用private File file接收的文件,改其他名字就是null,目前还不知道怎么设置控件中的这个值
然后效果就是这个样子
想要进度条需要加上这些css样式,就是已有控制
<style type="text/css">#uploadfileQueue {position: relative;left: 0;top: 0;border: 1px solid #a7c5e2;margin-bottom: 5px;height: 228px;width: 350px;overflow-x: hidden;overflow-y: auto;}.uploadify-queue-item {/* background-color: #F5F5F5; */background-color: #FFF;-webkit-border-radius: 3px;-moz-border-radius: 3px;border-radius: 3px;font: 11px Verdana, Geneva, sans-serif;/* margin-top: 5px; */margin: 5px 5px 5px 5px;max-width: 350px;padding: 10px;}.uploadify-progress {background-color: #E5E5E5;margin-top: 10px;width: 100%;}.uploadify-progress-bar {background-color: #0099FF;height: 3px;width: 1px;} </style>
最后的效果。什么,还想要uploadify的删除队列里文件的叉叉,好吧
在style里再加上这段
.uploadify-queue-item .cancel a {background: url('js/uploadify-cancel.png') 0 0 no-repeat;float: right;height: 16px;text-indent: -9999px;width: 16px; }
当然还得加上删除的js代码。这里官方api里面有removeFile(file)但是,用再这里不太好使。于是使用了另一个方法splice(num,length),num是从第几个开始删,length是删除的个数。
function _plupload_removeFile(removeNum,fileId){globalUploader.files.splice(removeNum,1);//删除部分文件 $(fileId).fadeOut(); }
最终效果。
转载于:https://www.cnblogs.com/llhua/p/3805968.html
plupload+artdialog实现多平台文件上传相关推荐
- pupload 文件分块 php,基于Plupload实现Base64分割的文件上传方案
标题:基于Plupload实现Base64分割的文件上传方案 关键词:文件上传.Base64.Plupload.Blob.分割上传 领域:Web前端 作者:孙振强 日期:2018-04-13 目录 背 ...
- 安鸾渗透实战平台(文件上传)—— Nginx解析漏洞 (100分)
漏洞环境 安鸾渗透实战平台 图片.一句话木马 中国蚁剑(webshell管理工具) 题目 情况分析 根据提示,是nginx解析漏洞,查一下漏洞的对应信息,发现只要在源文件后缀后加上.php即可把图片文 ...
- 阿里云OSS直传多文件上传遇到的问题及解决方案
本人萌新,刚实习不久,在上一个项目需求中,需要用到阿里云的文件直传服务,通过各种找,最终找了一个比较靠谱的demo,基于plupload插件的一个前端文件上传插件.然后自己再进行了二次封装,并对其中的 ...
- html 文件上传_某平台存在多处任意文件上传
文章来源: EDI安全 01 漏洞标题 某平台存在多处任意文件上传 02 漏洞类型 文件上传 03 漏洞等级 中危 04 漏洞地址 http://xxxx.xxxxx.com/er.app.xxxx/ ...
- Plupload文件上传组件使用API
Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的<input type="file" />.Plupl ...
- java 批量上传图片插件_java多文件上传plupload控件实现多图片上传(一)
使用的是plupload-2.1.2 控件.网上资源挺多的,很好下载. plupload 官方地址 : http://www.plupload.com/ plupload 示例: http://www ...
- 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项...
首先感谢,http://www.cnblogs.com/2050/p/3913184.html 这篇文章作者. 在使用PLUpload之前个人先封装了一些常用配置,并且将success与error做为 ...
- angularjs结合plupload实现文件上传
转载注明:(罗志强的博客) angularjs的指令directive非常好使,可以很方便的结合各种插件,实现很强大的功能. 今天用到了plupload,就拿它举例吧. 正常的plupload用法应该 ...
- plupload文件上传插件使用
官方文档:http://www.phpin.net/tools/plupload/ //实例化组件 //附件1上传路径 var dirFile1 = '/upload/htfj/rchtfj/${da ...
最新文章
- 他研究了5000家AI公司,说人工智能应用该这么做!
- Linux的环境变量
- 前端有啥好用的手机模拟软件吗_隐藏应用,软件双开,一个APP就解决了
- linux安装python3_关于在linux系统中python第三库的区分和查找
- function implemented in Scala - compiled java code - some closure example
- SSH-key连接原理
- HDU-4255 A Famous Grid BFS
- Java字符串替换(replace)
- matlab中svm testacc参数,使用Matlab进行交叉验证的多类SVM的完整示例
- hdu 1978 How many ways(dp)
- 电子工程专业用得最多的17种软件,你哪个用得好?
- 薅羊毛!某东、某宝、某宁一次搞定~
- 计算机模拟掷骰子试验,掷骰子模拟
- 简单三招,设计复杂ERP报表
- 二叉搜索树的经典应用面试题(keykey-value模式)
- 2019年互联网公司月饼哪家强?阿里、百度、网易等14家中秋月饼盘点
- mysql数据库在政务项目中的运用_数据库区域论文,关于MySQL数据库在域名系统中的应用实现相关参考文献资料-免费论文范文...
- 用BitBlt实现透明贴图
- blender_mmd_tools_extra 插件介绍
- ossbrowser