下面是使用Servlet實現文件的下載功能:
package com.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.ResourceDao;
import com.pojo.Resource;
public class ResourceDownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//資源id
String id = request.getParameter("id");
//根據資源id查詢的資源對象
ResourceDao dao = new ResourceDao();
Resource res = dao.getResourceById(Integer.parseInt(id));
//設置響應客戶端的類型
response.setContentType("application/x-download");
//防止中文文件名亂碼,服務器端到客戶端的編碼方式(和從客戶端到服務器端的編碼方式相反)
String name = new String(res.getName().getBytes("utf-8"),"iso-8859-1");
//設置http報頭
response.setHeader("Content-Disposition", "attachment;filename="+name);
//從服務器端讀取文件
File file = new File(res.getLocation());
FileInputStream fis = new FileInputStream(file);
//byte緩存數組
byte[] b = new byte[1024];
int len = -1;//每次讀取的字節數
//輸出流 到客戶端
ServletOutputStream sos = response.getOutputStream();
while((len = fis.read(b)) != -1){
sos.write(b, 0, len);
}
fis.close();
sos.flush();
sos.close();
}
}