用Servlet把文件寫到Respond輸出流里面供用戶下載

jopen 9年前發布 | 2K 次閱讀 Java

download.java里面的代碼,獲取服務端存放文件的真實路徑之后,把這個文件先寫到緩沖區,再把緩沖區的東西寫到respond輸出流供用戶下載。

    import java.io.;
import java.net.
;
import javax.servlet.;
import javax.servlet.http.
;
import javax.servlet.annotation.*;

@WebServlet(name = "download", urlPatterns = { "/download" })  
public class download extends HttpServlet {  
    private static final long serialVersionUID = 1L;  

    protected void service(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        String filePath = this.getServletContext().getRealPath("/");// 獲取真實路徑  
        String downloadFilename = "中文是沒有問題的.jpg";// 在下載框默認顯示的文件名  
        downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");  
        // 對默認下載的文件名編碼。不編碼的結果就是,在客戶端下載時文件名亂碼  
        File file = new File(filePath + File.separator + "Chrysanthemum.jpg");  
        if (file.exists()) {  
            // 寫明要下載的文件的大小  
            response.setContentLength((int) file.length());  
            response.setHeader("Content-Disposition", "attachment;filename="  
                    + downloadFilename);// 設置在下載框默認顯示的文件名  
            response.setContentType("application/octet-stream");// 指明response的返回對象是文件流  
            // 讀出文件到response  
            // 這里是先需要把要把文件內容先讀到緩沖區  
            // 再把緩沖區的內容寫到response的輸出流供用戶下載  
            FileInputStream fileInputStream = new FileInputStream(file);  
            BufferedInputStream bufferedInputStream = new BufferedInputStream(  
                    fileInputStream);  
            byte[] b = new byte[bufferedInputStream.available()];  
            bufferedInputStream.read(b);  
            OutputStream outputStream = response.getOutputStream();  
            outputStream.write(b);  
            // 人走帶門  
            bufferedInputStream.close();  
            outputStream.flush();  
            outputStream.close();  
        }  
    }  
}  </pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!