文件上传和文件下载是我们学JAVA Web时必不可少的模块。今天我们探讨下这个问题

文件上传:

request.setCharacterEncoding("utf-8");//设置请求乱码

response.setContentType("text/html;charset=utf-8");//设置响应乱码,先把两个乱码问题解决。防止乱码

DiskFileItemFactory fatory=new DiskFileItemFactory();//建立一个DiskFileItemFactory
ServletFileUpload fileupload = new ServletFileUpload(fatory);//使用ServletFileUpload调用这个工厂
// fileupload.setFileSizeMax(1024*60);//设置文件单个大小不超过60k
fileupload.setSizeMax(1024*300);//设置文件总大小不超过300k
ServletContext servletContext = request.getServletContext();
String realPath = servletContext.getRealPath("/upfile");////获取指定文件夹的路径(新建一个服务器上的upfile的文件夹)
File file=new File(realPath);//在这个路径下声明file
if(file.exists()){
file.mkdirs();
}//文件存在则遍历
try {
List<FileItem> filelist = fileupload.parseRequest(request);
for(FileItem item:filelist){
if(item.isFormField()){
String name=item.getFieldName();
}else{
//不上传空文件
long size = item.getSize();
if(size ==0){//文件为空,跳过此次判断,不进行上传
continue;
}
//使用UUID唯一标识文件名字,使图片不被覆盖。
String name = item.getName();
String prefix = UUID.randomUUID().toString();
prefix = prefix.replace("-","");
String fileName = prefix+"_"+name;
try {
item.write(new File(realPath+"\\"+fileName));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch(FileSizeLimitExceededException e){
System.out.println("单个文件超过60kb");
}catch(SizeLimitExceededException e){
System.out.println("总文件超过300kb");
}catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

文件下载:

ServletContext servletContext = request.getServletContext();
String fileName="童话镇.mp3";
String path = servletContext.getRealPath("/WEB-INF/"+fileName);//得到文件的路径
File file=new File(path);
InputStream in=new FileInputStream(file);//将文件放在输入流中
//fileName=new String(fileName.getBytes("gbk"),"iso8859-1");
fileName = java.net.URLEncoder.encode(fileName,"utf-8");//防止中文乱码,下载后不能播放和观看
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
ServletOutputStream out = response.getOutputStream();
IOUtils.copy(in, out);//调用IOUtils方法将输入流转为输出流
in.close();//关闭输入流

Servlet之文件的上传与下载的更多相关文章

  1. jsp+servlet实现文件的上传和下载

    实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载: (1):上传文件是上传到服务器上,而保存到数据库是文件名 (2):上传文件是以文件转换为二进制流的形式上传的 (3): ...

  2. Servlet 实现文件的上传与下载

    这段时间尝试写了一个小web项目,其中涉及到文件上传与下载,虽然网上有很多成熟的框架供使用,但为了学习我还是选择了自己编写相关的代码.当中遇到了很多问题,所以在此这分享完整的上传与下载代码供大家借鉴. ...

  3. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  4. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  5. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  6. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  7. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  8. 文件的上传和下载--SpringMVC

    文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...

  9. java 文件的上传和下载

    主要介绍使用 smartupload.jar 包中的方法对文件的上传和下载.上传时文件是存放在服务器中,我用的是tamcat. 首先建立一个servlet 类,对文件的操作 package com.d ...

随机推荐

  1. Python蜕变-2017-4-23

    我的第一篇博客,这是试水练习.这次上的菜是Haporxy配置文件操作. <1> 上需求: 具体配置文件如下: global log 127.0.0.1 local2 daemon maxc ...

  2. 【D3】transition API

    摘要: 动画类API 一.API 使用 1. 1 d3.ease 1.2 d3.timer Start a custom animation timer, invoking the specified ...

  3. 微信小程序-滚动消息通知

    写在前面: 微信小程序学的不太多,做了一个简单的项目,回来很快时间内把在深圳两天的房租给赚回来了. 这次我主要想总结一下微信小程序实现上下滚动消息提醒,主要是利用swiper组件来实现,swiper组 ...

  4. ES2017中的修饰器Decorator

    前面的话 修饰器(Decorator)是一个函数,用来修改类的行为.本文将详细介绍ES2017中的修饰器Decorator 概述 ES2017 引入了这项功能,目前 Babel 转码器已经支持Deco ...

  5. 蓝桥杯比赛javaB组练习《饮料换购》

    题目如下: 饮料换购 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账. 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么 ...

  6. jQuery 去空

    //去左右空格; function trim(s){ return s.replace(/(^\s*)|(\s*$)/g, ""); }     //去掉字符串中所有空格(包括中间 ...

  7. 福利 c++ 标准头文件大全

    #include<cmath> #include<math.h> #include<ctype.h> #include<algorithm> #incl ...

  8. 求m区间内的最小值

    洛谷P1440 求m区间内的最小值 ............................................................................... 以上 ...

  9. nginx实现请求的负载均衡 + keepalived实现nginx的高可用

    前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种 ...

  10. Can not issue data manipulation statements with executeQuery().解决的方法

    query是查询用的,而update是插入和更新,删除修改用的. executeQuery()语句是用于产生单个结果集的语句,如select语句,在什么情况下用,当你的数据库已经保存了数据后,要进行查 ...