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;}}}
}

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨判断三角形【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 8丨平面上的最近距离【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

python实现统计你一共写了多少行代码

程序员要保证一定的代码量就必须勤奋的敲代码&#xff0c;但怎么知道自己一共写了多少代码呢&#xff0c;笔者用python写了个简单的脚本&#xff0c;遍历所有的.java,.cpp,.c文件的行数&#xff0c;但是正如大家所知&#xff0c;java生成了许多代码&#xff0c;所以有许多水分&…

工业机器人:四大家族垄断全球市场

来源&#xff1a;广发证券在世界工业机器人业界中&#xff0c;以瑞士的ABB、德国的库卡、日本的发那科和安川电机最为著名&#xff0c;并称工业机器人四大家族。全球机器人市场中&#xff0c;四大家族一直占据着重要位置&#xff0c;总市场份额一度超过50%以上。2015年以来由于…

Lucene正则表达式查询RegenxQuery

1 /*2 * 正则表达式查询3 */4 5 6 import java.io.IOException;7 8 import org.apache.lucene.analysis.standard.StandardAnalyzer;9 import org.apache.lucene.document.Document; 10 import org.apache.lucene.document.Field; 11 import org.apache.lucene.index.IndexWr…

pyinstaller--将py文件转化成exe

首先要注意一下:打包python文件成exe格式这个过程只能在windows环境下运行 1. 直接在命令行用pip安装 pyinstaller pip install pyinstaller</p> 2. 下载安装pyinstaler运行时所需要的windows拓展—pywin32 pywin32:http://sourceforge.net/projects/pywin32/files/p…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 9丨平均工资:部门与公司比较【难度困难】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

深度|全面了解一下这个世界上最奇葩的公司:Google!

来源&#xff1a;轮回的刻度2015年8月11日&#xff0c;Google公司架构调整的资讯与分析刷遍了朋友圈。这些数不胜数的文章&#xff0c;几乎都是这样这样一种基调&#xff1a;Google好像做了一件很重大的事情&#xff0c;但是谁也不清楚它为什么这么做。这个问题也困扰着我&…

【原创】关于移动铁通某些网站打不开的问题

上下文&#xff1a;同学家移动铁通宽带&#xff0c;想要访问 www.xads.gov.cn (西安地税官网&#xff0c;做的我就不评价了) 有时网站能打开&#xff0c;有时却打不开 解决过程&#xff1a;想起自己家用的也是移动铁通&#xff0c;也是某些网站能有时能打开有时打不开。还是采用…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 9丨有趣的电影【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

一文看懂机器人技术的发展史

来源&#xff1a;传感器技术机器人技术是综合了计算机、控制论、机构学、信息和传感技术、人工智能、仿生学等多学科而形成的高新技术&#xff0c;是当代研究十分活跃&#xff0c;应用日益广泛的领域。机器人应用情况&#xff0c;是一个国家工业自动化水平的重要标志。机器人并…

python实现简单爬虫抓取图片

最近在学习python,正如大家所知&#xff0c;python在网络爬虫方面有着广泛的应用&#xff0c;下面是一个利用python程序抓取网络图片的简单程序&#xff0c;可以批量下载一个网站更新的图片&#xff0c;其中使用了代理IP的技术。 import urllib.request import os import rand…

m3u:直播流的html接近下载

转载于&#xff1a;http://en.wikipedia.org/wiki/M3U M3U is a computer file format that stores multimedia playlists. It is supported by many applications, including media players such as Windows Media Player, iTunes, Winamp, foobar2000, Totem and JuK. Conten…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 10丨换座位【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

5G之后是什么?

来源&#xff1a;IEEE电气电子工程师学会如果你听过有关5G的承诺它可为自动驾驶汽车和沉浸式虚拟现实保驾护航的宣传&#xff0c;估计你很快就会意识到下一代无线网络将需要承载多少数据。但是&#xff0c;工程师们是不是太专注于提供满足数据饥渴型应用程序需要的低延迟网络&a…

javaweb实现验证码功能

在javaweb的用户注册与登陆功能时&#xff0c;有时为了防止漏洞或者大量注册&#xff0c;可以使用验证码功能&#xff0c;下面是验证码的一个简单实现 验证码类 public class ValiImg extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletRespon…

int _tmain(int argc, _TCHAR* argv[])

argv接收从命令行传来的参数&#xff0c;在程序里可以通过argv[i]来使用。比方你要执行的.exe文件名为test,你在命令行中输入test 2 hello world! 那么在程序里argv[0]就是hello,argv[1]就是world!上面输入的2告诉程序一共有几个命令行参数&#xff0c;用argc表示&#xff0c;就…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 10丨买下所有产品的客户【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

数据洪流时代的芯片之变

芯片无所不在&#xff0c;没有芯片&#xff0c;就没有现代生活。 图片来源&#xff1a;百度图片来源&#xff1a;科学网摘要&#xff1a;自中兴事件发生以来&#xff0c;对于我国半导体及芯片产业一直存在两种截然相反的认识。自中兴事件发生以来&#xff0c;对于我国半导体及芯…

javamail实现邮箱验证功能

javamail是基于SMTP协议和POP3协议的邮件发送与接收系统&#xff0c;在用户注册与登陆的过程中&#xff0c;常需要用到邮箱验证功能&#xff0c;下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地址&#xff0c;并使用方法发送邮件 //校验用户名if(dao.find…