首页 > 代码库 > 文件上传与下载概述

文件上传与下载概述

 

一 概述

1.什么是文件上传?
将本地文件保存到服务器上的过程,叫做文件上传。

2.什么是文件下载?
广义上,任何从服务器端获取数据的过程都属于文件下载,默认情况下由浏览器打开展示。狭义的文件下载,指的是将从服务器端获取的数据以附件的形式保存到本地。因此下载文件时,需要重新设定浏览器处理响应内容的方式:

response.setHeader("Content-disposition","attachment;filename=xxxxxx");

由于响应报头只支持ISO-8859-1的编码方式,如果文件名含有中文,将出现乱码,因此文件名必须转化为ISO-8859-1编码形式:

byte[] buf=filenameStr.getBytes("UTF-8");//将文件名转化为UTF-8编码系统下的字节码(工作空间采用UTF-8编码)
String filename =new String(buf,"ISO-8859-1");//采用ISO-8859-1对字节码重新进行编码

 

 二 Servlet中实现文件下载的核心代码

 

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         // TODO Auto-generated method stub
 4         response.setContentType("text/html;charset=UTF-8");// 设置响应体中内容的编码方式
 5 
 6         /*
 7          * 将含有中文的文件名转化为ISO-8859-1编码形式
 8          */
 9         String filenameStr = "图片A";
10         byte[] bytes = filenameStr.getBytes("UTF-8");
11         String filename = new String(bytes, "ISO-8859-1");
12 
13         System.out.println("filename=" + filename);
14         System.out.println("开始文件下载");
15 
16        // 设置浏览器以附件形式处理响应
17         response.setHeader("Content-Disposition", "attachment;filename=" + filename + ".jpg");
18 
19         InputStream is = getServletContext().getResourceAsStream("/Files/a.jpg");// 以输入流形式获取上传文件
20         ServletOutputStream os = response.getOutputStream();// 获取指向客户端的输出流,按照客户端指定路径输出,
21 
22         /*
23          * 输入流与输出流结合,先获取文件内容,再将内容输出
24          */
25         int len = -1;
26         byte[] buf = new byte[1024];
27         while ((len = is.read(buf)) != -1) {
28             os.write(buf);
29         }
30         os.close();
31         is.close();
32     }

 

文件上传与下载概述