下载
1 下载就是向客户端响应字节数据
把文件变成自己诶数组,使用response.getoutputStream()来响应浏览器
2下载要求
两头一流(头1 Content-Type:你传客户端的是什么类型,头2 Content-Disposition:默认值是 inline。比如你用的图片,没有这个头,就会直接用浏览器打开,而不是下载,attachment:filename=yyy,流即使一个数据)
细节
1 下载就是向客户端响应字节数据
把文件变成自己诶数组,使用response.getoutputStream()来响应浏览器
2下载要求
两头一流(头1 Content-Type:你传客户端的是什么类型,头2 Content-Disposition:默认值是 inline。比如你用的图片,没有这个头,就会直接用浏览器打开,而不是下载,attachment:filename=yyy,流即使一个数据)
细节
下载逛得名字会显示乱码
package yuan.cn.web.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
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;
import org.apache.commons.io.IOUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 两头一流
*/
String filename="E:/白冰.jpg";
//String fl=new String("白冰.jpg".getBytes("GBK"),"ISO-8859-1");//防止边框乱码
String fl=filenameEncoding(filename,request);
String contenttype=this.getServletContext().getMimeType(filename);//通过文件名称获取MineType类型
String contentDisposition="attachment;filename="+fl;
FileInputStream input=new FileInputStream(filename);//一个流
response.setHeader("Content-Type", contenttype);
response.setHeader("Content-Disposition", contentDisposition);
ServletOutputStream out=response.getOutputStream();
IOUtils.copy(input, out);//copy流
input.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* 对文件名称编码
* @param filename
* @param re
* @return
* @throws IOException
*/
public static String filenameEncoding(String filename,HttpServletRequest re) throws IOException
{
String agent=re.getHeader("User-Agent");
if(agent.contains("Firefox")){
BASE64Encoder base=new BASE64Encoder();
filename="=?utf-8?B?"+base.encode(filename.getBytes("utf-8"))+"?=";
}
else {
filename=URLEncoder.encode(filename,"utf-8");
}
return filename;
}
}