java 文件流下载实例笔记
servlet.java
package cn.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FiledownloadServlet
*/
public class FiledownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FiledownloadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// String agent = request.getHeader("USER-AGENT");
// System.out.println("agent:\t" + agent + "\n\n");
File file = new File("E:\\Files\\OSGI\\OSGi.pdf");
String name = "中文.pdf";
System.out.println(downLoadFile(request, response, file, name));
}
/**
* Firefox-->Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101
*
* Firefox/12.0 IE-->Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1;
* Trident/4.0; Foxy/1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET
* CLR 3.0.30729; Media Center PC 6.0)
*
* Chrome-->Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like
* Gecko) Chrome/19.0.1084.46 Safari/536.5
*
* @param request
* @param name
* @return
*/
public static String encodeFileName(HttpServletRequest request, String name) {
String agent = request.getHeader("USER-AGENT");
String returnName;
if (null != agent && -1 != agent.indexOf("MSIE")) { // IE
try {
returnName = java.net.URLEncoder.encode(name, "utf-8");
} catch (UnsupportedEncodingException e) {
returnName = name;
}
} else { // Firefox Chrome
try {
returnName = new String(name.getBytes("utf-8"), "iso8859-1");
} catch (UnsupportedEncodingException e) {
returnName = name;
}
}
return returnName;
}
/**
*
* @param request
* @param response
* @param file
* @return
*/
public static boolean downLoadFile(HttpServletRequest request,
HttpServletResponse response, File file,String downName) {
boolean returnFlag = false;
if (file.exists()) { // file is not null
if (file.isFile()) { // must is a file
response.setContentType("application/x-download");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition","attachment; filename="+ encodeFileName(request, downName));
response.setHeader("Content-Length",file.length()+"");
//以下慎重
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0);
InputStream is = null;
OutputStream os = null;
try {
os = response.getOutputStream();
is = new FileInputStream(file);
byte[] b = new byte[1024];
int len = 0;
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
os.flush();
returnFlag=true;
} catch (IOException e) {
// log
returnFlag=false;
} finally {
if (is != null) {
try {
is.close();
returnFlag=true;
} catch (IOException e) {
returnFlag=false;
// log
}
}
if (os != null) {
try {
os.close();
returnFlag=true;
} catch (IOException e) {
returnFlag=false;
// log
}
}
}
}
}
return returnFlag;
}
}