artDialog+plupload实现多文件上传
Plupload简介
Plupload是有TinyMCE的开发者开发的,为您的内容管理系统或是类似上传程序提供一个高度可用的上传插件。Plupload 目前分为一个核心API 和一个jQuery上传队列部件,这样使你可以直接使用或是自己定制。
一、效果展示
包括文件上传面板以及文件上传列表
二、介绍
长话短说,采用spring springMVC mybatis maven mysql,实现多文件上传功能,下载使用的是流的形式。
其中涉及的分页我会另开一片博客介绍。
三、准备材料
plupload
artDialog
还有一份初始化插件的js文件
这些可以直接从我的分享连接里面下载
链接 密码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实现多文件上传,希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程