实现通过访问url直接弹出保存文件
package com.persist.response;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ResponseDemo2
*/
@WebServlet("/ResponseDemo2")
public class ResponseDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L;
public ResponseDemo2() {
super();
}
@SuppressWarnings("resource")
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//同时设置服务器和客户端的编码为utf-8
//如果客户端图片显示乱码,可以将当前的编码去掉
//response.setContentType("text/html;charset=utf-8");
//获取图片
ServletContext context = getServletContext();
String imgPath = context.getRealPath("/WEB-INF/classes/美女03.jpg");
//获取图片的名字
String picName = imgPath.substring(imgPath.lastIndexOf("\\")+1);
System.out.println(picName);
//如果图片的名字是中文的解决办法
//采用encode编码,第一个参数:需要编码的文本,第二个参数:指定的编码
picName = URLEncoder.encode(picName, "utf-8");
//将图片读入内存
FileInputStream fis = new FileInputStream(imgPath);
//将图片写出到网络
ServletOutputStream sos = response.getOutputStream();
//设置客户端下载
response.setHeader("content-disposition", "attachment;filename="+picName);
byte[] arr = new byte[1024];
int num = -1;
while((num = fis.read(arr)) != -1){
sos.write(arr, 0, num);
sos.flush();
}
fis.close();
sos.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}