标签:客户端 路径 [] protect att protected exception 方式 name
一 概述
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 }
标签:客户端 路径 [] protect att protected exception 方式 name
原文地址:http://www.cnblogs.com/tonghun/p/6916386.html