commons-fileupload实现文件上传下载
来源:互联网 发布:千牛淘宝修改店铺名称 编辑:程序博客网 时间:2024/06/03 17:23
commons-fileupload是Apache提供的一个实现文件上传下载的简单,有效途径,需要commons-io包的支持,本文是一个简单的示例
上传页面,注意设置响应头
<body> <center> <h1>文件上传页面</h1><hr> <form action="${pageContext.request.contextPath }/servlet/UploadServlet" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file1"/><br> 描述信息:<textarea rows="5" cols="45" name="discription"></textarea><br> <input type="submit" value="上传"/> </form> </center> </body>
上传的servlet
//上传文件 String upload=this.getServletContext().getRealPath("WEB-INF/upload"); String temp=this.getServletContext().getRealPath("WEB-INF/temp"); Map pmap=new HashMap(); //get client IP address pmap.put("ip", request.getRemoteAddr()); DiskFileItemFactory factory=new DiskFileItemFactory(); //设定内存缓冲区大小 Set the memory buffer size factory.setSizeThreshold(1024*100); //指定临时文件目录 Specifies the directory for temporary files factory.setRepository(new File(temp)); ServletFileUpload fileUpload=new ServletFileUpload(factory); fileUpload.setHeaderEncoding("utf-8"); fileUpload.setFileSizeMax(1024*1024*100); fileUpload.setSizeMax(1024*1024*200); //set form style enctype="multipart/form-data" if(!fileUpload.isMultipartContent(request)) { throw new RuntimeException("请使用正确的表单进行上传"); } //解析request try { List<FileItem> list= fileUpload.parseRequest(request); //遍历list for(FileItem item:list) { if(item.isFormField()) { String name=item.getFieldName(); String value=item.getString("utf-8"); pmap.put(name, value); }else { String realname=item.getName(); String arry[]=realname.split("\\\\"); realname=arry[arry.length-1]; System.out.println(realname); String uuidName=UUID.randomUUID().toString()+"_"+realname; pmap.put("realname", realname); pmap.put("uuidname", uuidName); InputStream in=item.getInputStream(); String hash=Integer.toHexString(uuidName.hashCode()); String savepath="/WEB-INF/upload"; for(char c:hash.toCharArray()) { upload+="/"+c; savepath+="/"+c; } new File(upload).mkdirs(); pmap.put("savepath", savepath); OutputStream out=new FileOutputStream(new File(upload,uuidName)); IOUtils.In2Out(in, out); IOUtils.close(in, out); item.delete(); } } } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //向数据库中插入数据 Resourse r=new Resourse(); try { BeanUtils.populate(r, pmap); String sql="insert into netdisk values(null,?,?,?,?,null,?)"; QueryRunner runner=new QueryRunner(DaoUtils.getSource()); runner.update(sql,r.getUuidname(),r.getRealname(),r.getSavepath(),r.getIp(),r.getDescription()); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //重定向回主页 response.sendRedirect(request.getContextPath()+"/index.jsp");
为防止重名,所以使用了UUIDNAME,把文件上传到web-inf/upload文件夹下,并且将路径与文件名保存到数据库中,上传功能完成
下载实现
下载页面
<body> <center> <h1>下载列表</h1><hr> <c:forEach items="${requestScope.list }" var="r"> <h2>文件名:${r.realname }<br></h2> 上传时间:${r.uploadtime }<br> 上传者IP:${r.ip }<br> 描述信息:${r.description }<br> <a href="${pageContext.request.contextPath }/servlet/DownServlet?id=${r.id}">下载</a><br><hr> </c:forEach> </center> </body>
下载实现
response.setContentType("text/html;charset=utf-8"); //获取ID String id=request.getParameter("id"); //根据ID查找资源 String sql="select * from netdisk where id=?"; Resourse r=null; QueryRunner runner=new QueryRunner(DaoUtils.getSource()); try { r= runner.query(sql, new BeanHandler<Resourse>(Resourse.class), id); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } if(r==null) { response.getWriter().write("找不到该资源!!!!"); return; }else { //指定响应头 response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(r.getRealname(),"UTF-8")); response.setContentType(this.getServletContext().getMimeType(r.getRealname())); String filePath=this.getServletContext().getRealPath(r.getSavepath()+"/"+r.getUuidname()); InputStream in=new FileInputStream(filePath); OutputStream out=response.getOutputStream(); IOUtils.In2Out(in, out); IOUtils.close(in, null); }
上传下载完成,注意,下载时一定要指定两个响应头
IO工具类
public class IOUtils { private IOUtils() { } public static void In2Out(InputStream in,OutputStream out) throws IOException{ byte [] bs = new byte[1024]; int i = 0; while((i=in.read(bs))!=-1){ out.write(bs,0,i); } } public static void close(InputStream in,OutputStream out){ if(in!=null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); }finally{ in = null; } } if(out!=null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); }finally{ out = null; } } }}
完成
0 0
- commons-fileupload实现文件上传下载
- commons-fileupload上传下载文件
- 文件上传下载之commons-fileupload
- JavaWeb实现文件上传下载功能实例解析------apache.commons.fileupload
- 使用commons-fileupload组件上传下载文件
- commons-fileupload-1.2.2实现java上传下载
- commons-fileupload上传下载
- commons-fileupload上传下载
- commons-fileupload 实现文件上传
- Commons-Fileupload 实现文件上传
- Commons-FileUpload实现文件上传
- commons-fileupload实现文件上传
- JSP 文件上传下载系列之二[Commons fileUpload]
- JSP用common-fileupload实现文件上传下载
- commons-fileupload.jar实现文件上传
- 用commons-fileupload-1.2 实现文件上传
- 使用commons-fileupload实现文件上传
- Apache Commons fileUpload实现文件上传
- Balancing the Scale
- 第3周.项目2:个人所得税计算器
- 跟着廖雪峰的git教程学习(2)时光机穿梭
- 安装github for windows出现问题
- 初识runloop
- commons-fileupload实现文件上传下载
- ATEN宏正发布全新CN8600 KVM over IP解决方案
- iOS中MD5加密
- linux 系统优化
- 第3周.项目2:本月有几天?
- c++中vector的用法详解
- zigbee 基础知识
- 系统的管态与目态
- hihocoder 1261 String Problem II (Trie树)