Servlet實現文件下載功能

下面是使用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();
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章