多文件上传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() {
- $('#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的更多相关文章
- 文件上传插件 -- plupload
refresh:重新实例化uploader removeFile(id):从file中移除某个文件 splice(start,length):从队列中start开始删除length个文件, 返回被删除 ...
- 多图片/文件上传 - SwfUpload/PlUpload
<文件上传利器SWFUpload使用指南> <前端上传组件Plupload使用指南>
- web 文件上传组件 Plupload
Plupload官网:点击打开链接 建议下载最新版本号,低版本号会出现浏览器兼容问题. 近期公司有个项目须要在web端使用多文件上传功能.刚開始准备使用HTML5来做.但是IE9下面是都不支持的, ...
- web文件上传大小限制
最近在项目中遇到上传文件,对上传文件的大小需要进行限制,这里学习和整理了一下一些常规的文件大小限制的方法. 一般分为两种方式,一种是服务器端判断文件大小进行限制,这种方法的存在明显的缺陷,当用户过多后 ...
- Plupload文件上传组件使用API
Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的<input type=”file” />.Plupload会自动侦测当前 ...
- plupload+struts2实现文件上传下载
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" ...
- plupload文件上传插件
一 资源文档 二 基本使用 三 可能遇到的问题 一 资源文档 Git仓库地址:https://github.com/moxiecode/plupload 一个中文速查:http://www.cnblo ...
- angularjs结合plupload实现文件上传
转载注明:(罗志强的博客) angularjs的指令directive非常好使,可以很方便的结合各种插件,实现很强大的功能. 今天用到了plupload,就拿它举例吧. 正常的plupload用法应该 ...
- 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项
首先感谢,http://www.cnblogs.com/2050/p/3913184.html 这篇文章作者. 在使用PLUpload之前个人先封装了一些常用配置,并且将success与error做为 ...
随机推荐
- sqlserver2008 复制,镜像,日志传输及故障转移集群区别
一, 数据库复制 SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步, ...
- LINUX O_Direact
http://laokaddk.blog.51cto.com/368606/699563
- (转)从Membership 到 .NET4.5 之 ASP.NET Identity
引入 - 用户信息是如何存在数据库中的 我们前两篇都只讲到了怎么用Membership注册,登录等,但是我们漏掉了一个很重要并且是基本上每个用Membership的人都想问的,我的用户信息怎么保存?我 ...
- oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT_数据库的几种锁
问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise Edition Releas ...
- archlinux下wifi-menu显示连接超时
/etc/network.d/wlan0 增加: DHCP_TIMEOUT=30
- VS 之 InstallShield Limited Edition for Visual Studio 2015 图文教程
从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“InstallShield Limited Edition for Vis ...
- Design Mode 之 创建模式
A.创建模式 首先,简单工厂模式不属于24种涉及模式. A0.简单工厂模式 简单工厂模式,分为三种:普通简单工厂.多方法简单工厂.静态方法简单工厂. A01.普通 就是建立一个工厂类,对实现了同一接口 ...
- postgres数据库中的数据转换
postgres8.3以后,字段数据之间的默认转换取消了.如果需要进行数据变换的话,在postgres数据库中,我们可以用"::"来进行字段数据的类型转换.实际上"::& ...
- hadoop下的Pipes(用C++进行hadoop程序开发)
说明:这篇博客来自我的CSDN博客:http://blog.csdn.net/lxxgreat/article/details/7755369 经过一上午的努力,终于以伪分布式模式运行了C++版的Ma ...
- [JavaEE] Eclipse中web-inf和meta-inf文件夹的信息
WEB-INF /WEB-INF/web.xml 你的Web应用程序配置文件,这是一个XML文件,其中描述了 servlet 和其他的应用组件配置及命名规则: /WEB- I ...