HttpServletResponse 如何将图片下载到客户端(OutputStream,PrintWriter)呢?
下文笔者讲述HttpServletResponse将图片下载到客户端的方法分享,如下所示:
OutputStream下载图片
在HttpServletResponse图片下载中,笔者建议使用OutputStream流 由于OutputStream流是一个字节流,可以处理任何类ing的数据例:
OutputStream下载图片
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、得到文件的绝对路径,并且通过该路径得到一个字节输入流
String path = this.getServletContext().getRealPath("/WEB-INF/classes/java265img.png");//得到下载文件的绝对路径
FileInputStream fis = new FileInputStream(path);
//2、创建字节输出流
ServletOutputStream sos = resp.getOutputStream();
//3、得到下载的文件名
String filename = path.substring(path.lastIndexOf("\\")+1);//得到的文件名为TomCat.png
//4、设置文件编码
filename = URLEncoder.encode(filename, "UTF-8");//编码为UTF-8
//5、告知客户端(浏览器)要下载文件
resp.setHeader("content-disposition", "attachment;filename="+filename);
resp.setHeader("content-type", "image/png");//文件类型
//6、输出
byte[] b = new byte[1024];
int len = 0;
while((len=fis.read(b)) != -1){
sos.write(b, 0, len);
}
sos.close();
fis.close();
}
PrintWriter下载图片
//HttpServletResponse PrintWriter下载图片实例
private void downloadFileByPrintWriter(HttpServletResponse response) throws FileNotFoundException, IOException {
String realPath = this.getServletContext().getRealPath("/download/java265img.JPG");//获取要下载的文件的绝对路径
String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名
//设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
FileReader in = new FileReader(realPath);
int len = 0;
char[] buffer = new char[1024];
PrintWriter out = response.getWriter();
while ((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器
}
in.close();
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


