javaweb文件的下载与上传

本文详细介绍了如何使用Servlet实现文件的下载和上传功能,包括设置MIME类型、读取本地文件并输出到客户端、处理多文件上传及使用第三方框架进行上传的方法。

1、文件的下载

在下载时首先要设置MIME类型;

(1)servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//声明MIME类型。
response.setContentType("application/x-msdownload");
//设置要上传的文件
File file=new File("e:"+File.separator+"hello.txt");
//获取上传的文件的名字
String fileName=file.getName();
//输入文件
InputStream intStream=new FileInputStream(file);
//输出文件
OutputStream out=response.getOutputStream();
//在下载时使下载的文件与上传的文件的名字一致
response.setHeader("Content-Disposition", "attachment;filename="+fileName+"");
if (!file.exists()) {
System.out.println("文件不存在");
}else{
byte[] b=new byte[1024];
int len=0;
while ((len=intStream.read(b))!=-1) {
out.write(b, 0, len);
}
}if (out!=null) {//关闭流
out.close();
}if (intStream!=null) {
intStream.close();
}
}

(2)index.html

<a href="download">下载文件</a>

2文件的上传

1)利用Tomcat3.0新特性进行多个文件上传

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Collection<Part> part=request.getParts();
//foreach写法
/* int len=part.size();
if (len==1) {
Part part1=request.getPart("file");
String filename=getName(part1);
String path="e:"+File.separator+filename;
part1.write(path);
}else {
for (Part part2 : part) {
String filename=getName(part2);
String path="e:"+File.separator+filename;
part2.write(path);
}
}*/
//迭代器写法
Iterator<Part> iterator=part.iterator();
while (iterator.hasNext()) {
Part part2 = (Part) iterator.next();
String filename=getName(part2);
String path="e:"+File.separator+filename;
part2.write(path);
}
}
//获取上传文件的名字
public String getName(Part part){
String head=part.getHeader("Content-Disposition");
int lastindex=head.lastIndexOf("\"");
int firstindex=head.lastIndexOf("\"", lastindex-1);
String filename=head.substring(firstindex+1, lastindex);
return filename;
}

2)使用第三方框架进行多个文件进行上传

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
DiskFileItemFactory factory=new DiskFileItemFactory();//获得磁盘条目工厂
String path="e:"+File.separator;//上传的路径
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
//高水平的API文件上传处理
ServletFileUpload fileUpload=new ServletFileUpload(factory);
List<FileItem> list;
try {
list = (List<FileItem>)fileUpload.parseRequest(request);
for (FileItem fileItem : list) {
String filename=fileItem.getName();
try {
//利用第三方框架进行上传
fileItem.write(new File(path, filename));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (FileUploadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

转载于:https://www.cnblogs.com/hx-infiniti/p/5356753.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值