您的位置:首页 > 其它

Servlet-实现文件下载功能

2016-10-15 09:42 453 查看
注意:这里我把一张名为“招IOS程序员”的jpg图片放到了工程的src目录下,也就是工程运行后的WEB-INF/classes目录下。

/**
* @author CSDN_LQR
* @TODO 使用Servlet实现图片文件下载
*/
public class ServletDemo3 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// 1、得到图片文件的文件路径
String path = getServletContext().getRealPath(
"/WEB-INF/classes/招IOS程序员.jpg");

// 2、得到文件的输入流
FileInputStream fis = new FileInputStream(path);

int len = 1;
byte[] b = new byte[1024];

// ================== 让浏览器下载图片 begin ==================

String filename = path.substring(path.lastIndexOf("\\") + 1);

// 设置文件名的编码
if (request.getHeader("user-agent").toLowerCase().contains("msie")) {
filename = URLEncoder.encode(filename, "UTF-8");// 将不安全的文件名改为UTF-8格式(为了让中文正常显示给浏览器)
} else {
filename = new String(filename.getBytes("UTF-8"), "iso-8859-1");// 火狐浏览器
}

// 告知浏览器要下载文件,如果没有这个,浏览器会直接把图片显示在网页上
response.setHeader("content-disposition", "attachment;filename="
+ filename);

//response.setHeader("content-type", "image/jpeg");
// 根据文件名自动获得文件类型
response.setContentType(this.getServletContext().getMimeType(fileName));

// ================== 让浏览器下载图片 end ==================

// 3、使用response输出流输出图片
ServletOutputStream sos = response.getOutputStream();
while ((len = fis.read(b)) != -1) {
sos.write(b, 0, len);
}

fis.close();
// sos.close();// 这个不用手动关闭,response是局部变量,servlet用完后会自动销毁

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片文件下载