开场白:刚考完了试,全校上下,人人皆各奔东西,一时间突然静悄悄的,偌大的广交,唯有几个帅气的IT男仍在寝室里兢兢业业的敲代码。
闲的无聊,闷得慌,于是就复习起Servlet的知识,才发现,response实现图片下载是辣么简单的。
源码+分析
package response;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 国富小哥
*/
@WebServlet("/ServletDownloadFile")
public class ServletDownloadFile extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletDownloadFile() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取ServletContext对象
ServletContext context = this.getServletContext();
// 获取当前目录的图片路径
String path = context.getRealPath("/download/buty.jpg");
// 截取图片文件名
String fileName = path.substring(path.lastIndexOf("\\") + 1);
System.out.println("filename=" + fileName);
// 通知浏览器执行下载操作
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
/**
* 注意: 如果图片名称是中文需要设置转码 response.setHeader("content-disposition",
* "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));
*/
// 读取文件的字节输入流
InputStream in = null;
// 写入浏览器的字节输出流
OutputStream out = null;
try {
in = new FileInputStream(path);
int len = 0;
// 字节缓冲区
byte[] buffer = new byte[1024];
out = response.getOutputStream();
// 把图片文件读入缓冲区
while ((len = in.read(buffer)) > 0) {
// 把缓冲区里的文件中写到浏览器
out.write(buffer, 0, len);
}
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
}
}
if (out != null) {
try {
out.close();
} catch (Exception e) {
}
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}