commons-fileupload实现文件上传下载
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实现文件上传下载相关推荐
- Apache Commons fileUpload实现文件上传
Apache的commons-fileupload.jar可方便的实现文件的上传功能,本文通过实例来介绍如何使用commons-fileupload.jar. @author:ZJ 07-2-22 B ...
- JSP基础:(7)jsp分页与文件上传下载
目录 1 jsp分页 1.1 定义 1.2 Servlet控制器方法 2 文件上传下载 2.1 定义 2.2 SmartUpload 2.2.1 介绍 2.2.2 SmartUpload组件-Requ ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- struts2教程--实现文件上传下载
Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...
- struts2教程(8)--文件上传下载
Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...
- 文件上传下载—servlet API实现
servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet;import java.io.File; impo ...
- servlet文件上传下载_Servlet上传文件和下载文件示例
servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...
- 文件上传表单 上传文件的细节 文件上传下载和数据库结合
1 文件上传表单 1)上传文件的本质是文本复制的过程 2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写 3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方 ...
- 用fileupload处理文件上传
用fileupload处理文件上传 作者:◇ 刘冬 发文时间:2003.07.09 15:52:43 Commons是Apache开放源代码组织中的一个Java子项目,该项目主要涉及一些开发中常用的模 ...
- 【SpringMVC笔记】拦截器 + 文件上传下载
拦截器 + 文件上传下载 拦截器(interceptor) 自定义拦截器 验证用户是否登录 (认证用户) 没有拦截器 配置拦截器 文件的上传 文件输出流进行文件上传 file.Transto 进行文件 ...
最新文章
- git提交代码遇到fatal: unable to access
- DASH直播平台的搭建
- 牛客网剑指offer编程实践1-10题
- 【渝粤题库】广东开放大学 PHP动态网站设计 形成性考核
- 窗体之间传递值的几种方法
- 杭电2086,数学归纳法
- linux下目录的基本命令
- SNMP(Simple Network Management Protocol)——简单网络管理协议
- JFLASH添加华大型号详细教程
- css vue 内联_vue ssr css内联样式和link标签重复
- JUCE学习笔记05-音频输出基础(白噪)
- CTFT、DTFT、DFT、FFT
- 怎么打开服务器注册表,如何利用Win7系统注册表设置Windows服务启动顺序
- 区块链之搭建区块链平台及智能合约的编写
- “真智能”黑马杀出,智能家居的下一战要攻破场景化?
- 矩阵分解在推荐系统中的应用及实践
- Python基础入门知识(2)
- VMware克隆虚拟机镜像、导入镜像,图文教程
- android实现高德地图集成
- php保存上传的音频文件在哪里,php - 如何在laravel中上传带有文件的音频? - 堆栈内存溢出...
热门文章
- 史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(三)
- 论文浅尝 - ICLR2022 | OntoProtein:融入基因本体知识的蛋白质预训练
- 论文浅尝 | DSKReG:基于关系GNN的推荐知识图谱可微抽样
- 商汤科技-数据运维工程师-提前批笔试题目汇总
- 2018 年,NLP 研究与应用进展到什么水平了?
- Android官方开发文档Training系列课程中文版:多样屏幕之实现自适应UI
- IDEA解决Maven项目编译后classes文件中没有.xml或.properties问题
- 爬取今日头条财经版块新闻
- js 控制页面跳转的5种方法
- WebService初入