一、效果展示

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

二、介绍

长话短说,采用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的更多相关文章

  1. 文件上传插件 -- plupload

    refresh:重新实例化uploader removeFile(id):从file中移除某个文件 splice(start,length):从队列中start开始删除length个文件, 返回被删除 ...

  2. 多图片/文件上传 - SwfUpload/PlUpload

    <文件上传利器SWFUpload使用指南> <前端上传组件Plupload使用指南>

  3. web 文件上传组件 Plupload

    Plupload官网:点击打开链接   建议下载最新版本号,低版本号会出现浏览器兼容问题. 近期公司有个项目须要在web端使用多文件上传功能.刚開始准备使用HTML5来做.但是IE9下面是都不支持的, ...

  4. web文件上传大小限制

    最近在项目中遇到上传文件,对上传文件的大小需要进行限制,这里学习和整理了一下一些常规的文件大小限制的方法. 一般分为两种方式,一种是服务器端判断文件大小进行限制,这种方法的存在明显的缺陷,当用户过多后 ...

  5. Plupload文件上传组件使用API

    Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的<input type=”file” />.Plupload会自动侦测当前 ...

  6. plupload+struts2实现文件上传下载

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8" ...

  7. plupload文件上传插件

    一 资源文档 二 基本使用 三 可能遇到的问题 一 资源文档 Git仓库地址:https://github.com/moxiecode/plupload 一个中文速查:http://www.cnblo ...

  8. angularjs结合plupload实现文件上传

    转载注明:(罗志强的博客) angularjs的指令directive非常好使,可以很方便的结合各种插件,实现很强大的功能. 今天用到了plupload,就拿它举例吧. 正常的plupload用法应该 ...

  9. 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项

    首先感谢,http://www.cnblogs.com/2050/p/3913184.html 这篇文章作者. 在使用PLUpload之前个人先封装了一些常用配置,并且将success与error做为 ...

随机推荐

  1. android之多媒体篇(二)

    管理音频焦点 情景:当你的app隐退到后台,而其他也有播放能力的app浮现在前台,这个时候,你可能要暂停你原有app的播放功能,和解除监听Media Button,把控制权交给前台的APP. 这就需要 ...

  2. iOS开发——UI篇Swift篇&UITextView

    UITextView 一:UITextView使用及其属性的设置 titleLabel.text = titleString //创建UITextView对象 textView = UITextVie ...

  3. JAVA正则表达式语法大全

    [正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...

  4. IPC——共享内存

    Linux进程间通信——使用共享内存 下面将讲解进程间通信的另一种方式,使用共享内存.   一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的 ...

  5. alljoyn连接时-fno-rtti选项测试结果

    以AllJoyn自带的chat示例在pc上测试结果如下: libAllJoyn.a编译选项 Chat编译选项 测试结果 -Wall -Werror=non-virtual-dtor -pipe -st ...

  6. WEB免费打印控件推荐

    在WEB系统中,打印的确是个烦人的问题. 要么自己开发打印控件,如果项目时间紧,肯定来不及. 要么购买成熟的打印控件,如果是大项目可以考虑,但如果项目只有几K到1.2W之间,这就麻烦了. 前段时间有机 ...

  7. hadoop群集安装中碰到的问题

    在hadoop群集安装结束后,进行格式测试出现问题如下 格式化 cd /data/hadoop/bin ./hdfs namenode -format 15/01/21 05:21:17 WARN f ...

  8. 【阿里云产品公测】PTS压力测试WP站搜索

    [阿里云产品公测]PTS压力测试WP站搜索 作者:阿里云用户cnsjw PTS性能测试服务是一个非常非常强大的压力测试工具.可以模拟百人同时访问网站的情况,并监测ECS和RDS的各项指标,生成非常详细 ...

  9. extjs中grid对于其中表单的表头的读取以及是否隐藏的判断

    //获取grid的表头信息 var columns=baseGrid.columns;                     alert(columns.length); //判断列是否隐藏并输出表 ...

  10. Gradle基本知识点与常用配置

    查看原文:http://blog.csdn.net/u010818425/article/details/52268126 本文篇幅较长,文中系统地讲解了Gradle的基本知识点以及一些常用的命令和配 ...