artDialog+plupload实现多文件上传


Posted in Javascript onJuly 19, 2016

Plupload简介

Plupload是有TinyMCE的开发者开发的,为您的内容管理系统或是类似上传程序提供一个高度可用的上传插件。Plupload 目前分为一个核心API 和一个jQuery上传队列部件,这样使你可以直接使用或是自己定制。

一、效果展示

包括文件上传面板以及文件上传列表

artDialog+plupload实现多文件上传artDialog+plupload实现多文件上传

二、介绍

长话短说,采用spring springMVC mybatis maven mysql,实现多文件上传功能,下载使用的是流的形式。

其中涉及的分页我会另开一片博客介绍。

三、准备材料

plupload

artDialog

还有一份初始化插件的js文件

这些可以直接从我的分享连接里面下载

链接:http://pan.baidu.com/s/1c27cTAK 密码:btqj

还有jquery 这个自行下载

四、前台代码

引入样式以及js文件

<link rel="stylesheet" href="resources/css/plupload.css" type="text/css">
<script src="resources/js/jquery.min.js"></script>
<script src="resources/upload/plupload.full.min.js"></script>
<script src="resources/artDialog4.1.7/artDialog.source.js?skin=blue"></script>
<script src="resources/js/upload.js"></script>

js代码

  _plupload(绑定的uuid,文件上传路径);①关于绑定的uuid,我举个例子,当前用户的id就是uuid,你可以把用户id和你上传的文件相关联,以后查询的话根据用户id就能查询这个用户上传的所有文件②这个方法是封装过的,在upload.js里面能看到,我里面注释写的很清楚,也可以参考官方文档

$(function() {
  3   $('#uploadBtn').click(function() {
   popUpDialog();
  });
  _plupload('test','${pageContext.request.contextPath}/uploadfile');
 });

页面代码,一个按钮,一个弹出框

<a id="uploadBtn" class="optionbtn inline" href="#">文件上传</a>
 <!-- 触发弹出框 -->
 <div id="uploadContent" 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>

五、后台代码

我都没有封装成方法,为了看得明白,可以自己封装一下

/**
  * 文件上传请求地址
  * 
  * @param request
  * @param response
  */
 @RequestMapping("uploadfile")
 public void upload(HttpServletRequest request, HttpServletResponse response) {
  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// 二进制上传
  CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");// 获取文件
  String unid = UUID.randomUUID().toString().replace("-", "");/* 文件主键 */
  String originalFilename = file.getOriginalFilename();/* 原文件名,包括后缀 */
  String flieSize = String.valueOf(file.getSize());/* 文件大小 */
  String path = null;/* 文件存储路径 */
  String punid = request.getParameter("punid"); /* 关联文件punid */
  // 保存文件
  if (file != null) {
   try {
    String basePath = request.getSession().getServletContext().getRealPath("/uploadfile");
    SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
    String subPath = sdf.format(new Date());
    path = basePath + subPath + unid + File.separator + originalFilename;
    // 如果文件夹不存在,就创建文件夹
    File dir = new File(path);
    if (!dir.exists()) {
     dir.mkdirs();
    }
    file.transferTo(dir);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  // 文件大小转换
  long kb = 1024;
  long mb = kb * 1024;
  long gb = mb * 1024;
  long size = Long.parseLong(flieSize);
  if (size >= gb) {
   flieSize = String.format("%.1f GB", (float) size / gb);
  } else if (size >= mb) {
   float f = (float) size / mb;
   flieSize = String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
  } else if (size >= kb) {
   float f = (float) size / kb;
   flieSize = String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
  } else {
   flieSize = String.format("%d B", size);
  }
  // 存储文件信息进数据库
  FileUpload fileUpload = new FileUpload();
  fileUpload.setUnid(unid);
  fileUpload.setOriginalFilename(originalFilename);
  fileUpload.setFlieSize(flieSize);
  fileUpload.setPath(path);
  fileUpload.setPunid(punid);
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  fileUpload.setFlieTime(df.format(new Date()));
  fileUploadService.insert(fileUpload);
 }

 这里附带一个下载的方法,是用文件流,根据文件id来进行下载

@RequestMapping("downloadfile")
 public void downLoadfile(HttpServletRequest request, HttpServletResponse response) {
  String unid = request.getParameter("unid");
  FileUpload fileUpload = fileUploadService.selectByPrimaryKey(unid);
  if (fileUpload != null) {
   try {
    String filename = new String(fileUpload.getOriginalFilename().getBytes("GBK"), "ISO-8859-1");
    String path = fileUpload.getPath();
    response.setCharacterEncoding("utf-8");
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;fileName=" + filename);
    response.setHeader("Content-Length", fileUpload.getFlieSize());
     InputStream inputStream = new FileInputStream(new
     File(path));
     OutputStream os = response.getOutputStream();
     byte[] b = new byte[2048];
     int length;
     while ((length = inputStream.read(b)) > 0) {
     os.write(b, 0, length);
     }
     os.close();
     inputStream.close();
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

还有一个删除方法

/**
  * 文件删除
  * 
  * @param request
  * @param response
  */
 @ResponseBody
 @RequestMapping("delfile")
 public Map<String, Object> delfile(HttpServletRequest request, HttpServletResponse response) {
  String unid = request.getParameter("unid");
  FileUpload fileUpload = fileUploadService.selectByPrimaryKey(unid);
  // 删除本地
  boolean flag = false;
  File file = new File(fileUpload.getPath());
  if (file.exists()) {// 路径为文件且不为空则进行删除
   flag = file.delete();
  }
  // 删除数据库
  int result = fileUploadService.deleteByPrimaryKey(unid);
  if (result > 0) {
   flag = true;
  }
  Map<String, Object> map = new HashMap<String, Object>();
  map.put("result", flag);
  return map;
 }

以上所述是小编给大家介绍的artDialog+plupload实现多文件上传,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js技巧--转义符&quot;\&quot;的妙用
Jan 09 Javascript
jquery nth-child()选择器的简单应用
Jul 10 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
Node.js安装教程和NPM包管理器使用详解
Aug 16 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
JSON相关知识汇总
Jul 03 Javascript
谈谈JavaScript类型系统之Math
Jan 06 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
webpack配置的最佳实践分享
Apr 21 Javascript
select2 ajax 设置默认值,初始值的方法
Aug 09 Javascript
如何使用pm2快速将项目部署到远程服务器
Mar 12 Javascript
Angular处理未可知异常错误的方法详解
Jan 17 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 #Javascript
如何在JS中实现相互转换XML和JSON
Jul 19 #Javascript
js 动态给元素添加、移除事件的实现方法
Jul 19 #Javascript
js实现动态创建的元素绑定事件
Jul 19 #Javascript
用js动态添加html元素,以及属性的简单实例
Jul 19 #Javascript
详谈JS中实现种子随机数及作用
Jul 19 #Javascript
全面了解JavaScript对象进阶
Jul 19 #Javascript
You might like
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
php绘制一条直线的方法
2015/01/24 PHP
Maps Javascript
2007/01/22 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python批量修改图片大小的方法
2018/07/24 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
如何基于python生成list的所有的子集
2019/11/11 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
实习生自我鉴定范文
2013/12/05 职场文书
节约用电标语
2014/06/17 职场文书
社保转移委托书范本
2014/10/08 职场文书
中学生学习保证书
2015/02/26 职场文书
员工升职自荐信
2015/03/27 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
二审答辩状范文
2015/05/22 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
详解pytorch创建tensor函数
2022/03/22 Python
table不让td文字溢出操作方法
2022/12/24 HTML / CSS