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 相关文章推荐
从JavaScript的函数重名看其初始化方式
Mar 08 Javascript
9个JavaScript评级/投票插件
Jan 18 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
Jul 07 Javascript
Node.js与PHP、Python的字符处理性能对比
Jul 06 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
May 07 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 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模块memcache和memcached区别分析
2011/06/14 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
javascript定义函数的方法
2010/12/06 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
python实现博客文章爬虫示例
2014/02/26 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
天网面试题
2013/04/07 面试题
优质的学校老师推荐信
2013/10/28 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB