因为将上传的内容放入到数据库中,所以也就不方便给定一个确切的地址让浏览器来下载,希望直接通过数据流的读
取实现文件的下载,这样更加方便一些。下面我们来演示一下文件的下载代码
package oop.hg.ytu.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oop.hu.ytu.dao.DownLoadDomain;
public class DownLoad extends HttpServlet {
/**
* 实现文件的下载
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DownLoadDomain dao = new DownLoadDomain();
response.setContentType("text/html;charset=UTF-8");
// 设置为下载application/x-download
response.setContentType("application/x-download");
String fileName = request.getParameter("fileName");
fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
String type = dao.getType(fileName);
type = "."+type;
type = fileName + type;
type = URLEncoder.encode(type, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ type);
InputStream in = dao.readBlob(fileName);
ServletOutputStream out = response.getOutputStream();
byte[] buff = new byte[1024];
int i = 0;
while((i = in.read(buff))>0){
out.write(buff, 0, i);
}
out.flush();
out.close();
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
这里主要就是下载的设置的那些头文件,请求头,还有就是下载的文件名如果含有中文,需要进行一下字符集的编码
才能够实现不乱码!