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 addresspmap.put("ip", request.getRemoteAddr());DiskFileItemFactory factory=new DiskFileItemFactory();//设定内存缓冲区大小 Set the memory buffer sizefactory.setSizeThreshold(1024*100);//指定临时文件目录 Specifies the directory for temporary filesfactory.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("请使用正确的表单进行上传");}//解析requesttry {List<FileItem> list= fileUpload.parseRequest(request);//遍历listfor(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");//获取IDString 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;}}}
}

完成

commons-fileupload实现文件上传下载相关推荐

  1. Apache Commons fileUpload实现文件上传

    Apache的commons-fileupload.jar可方便的实现文件的上传功能,本文通过实例来介绍如何使用commons-fileupload.jar. @author:ZJ 07-2-22 B ...

  2. JSP基础:(7)jsp分页与文件上传下载

    目录 1 jsp分页 1.1 定义 1.2 Servlet控制器方法 2 文件上传下载 2.1 定义 2.2 SmartUpload 2.2.1 介绍 2.2.2 SmartUpload组件-Requ ...

  3. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  4. struts2教程--实现文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  5. struts2教程(8)--文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  6. 文件上传下载—servlet API实现

    servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet;import java.io.File; impo ...

  7. servlet文件上传下载_Servlet上传文件和下载文件示例

    servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...

  8. 文件上传表单 上传文件的细节 文件上传下载和数据库结合

    1 文件上传表单    1)上传文件的本质是文本复制的过程    2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写    3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方 ...

  9. 用fileupload处理文件上传

    用fileupload处理文件上传 作者:◇ 刘冬 发文时间:2003.07.09 15:52:43 Commons是Apache开放源代码组织中的一个Java子项目,该项目主要涉及一些开发中常用的模 ...

  10. 【SpringMVC笔记】拦截器 + 文件上传下载

    拦截器 + 文件上传下载 拦截器(interceptor) 自定义拦截器 验证用户是否登录 (认证用户) 没有拦截器 配置拦截器 文件的上传 文件输出流进行文件上传 file.Transto 进行文件 ...

最新文章

  1. git提交代码遇到fatal: unable to access
  2. DASH直播平台的搭建
  3. 牛客网剑指offer编程实践1-10题
  4. 【渝粤题库】广东开放大学 PHP动态网站设计 形成性考核
  5. 窗体之间传递值的几种方法
  6. 杭电2086,数学归纳法
  7. linux下目录的基本命令
  8. SNMP(Simple Network Management Protocol)——简单网络管理协议
  9. JFLASH添加华大型号详细教程
  10. css vue 内联_vue ssr css内联样式和link标签重复
  11. JUCE学习笔记05-音频输出基础(白噪)
  12. CTFT、DTFT、DFT、FFT
  13. 怎么打开服务器注册表,如何利用Win7系统注册表设置Windows服务启动顺序
  14. 区块链之搭建区块链平台及智能合约的编写
  15. “真智能”黑马杀出,智能家居的下一战要攻破场景化?
  16. 矩阵分解在推荐系统中的应用及实践
  17. Python基础入门知识(2)
  18. VMware克隆虚拟机镜像、导入镜像,图文教程
  19. android实现高德地图集成
  20. php保存上传的音频文件在哪里,php - 如何在laravel中上传带有文件的音频? - 堆栈内存溢出...

热门文章

  1. 史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(三)
  2. 论文浅尝 - ICLR2022 | OntoProtein:融入基因本体知识的蛋白质预训练
  3. 论文浅尝 | DSKReG:基于关系GNN的推荐知识图谱可微抽样
  4. 商汤科技-数据运维工程师-提前批笔试题目汇总
  5. 2018 年,NLP 研究与应用进展到什么水平了?
  6. Android官方开发文档Training系列课程中文版:多样屏幕之实现自适应UI
  7. IDEA解决Maven项目编译后classes文件中没有.xml或.properties问题
  8. 爬取今日头条财经版块新闻
  9. js 控制页面跳转的5种方法
  10. WebService初入