用Servlet把文件寫到Respond輸出流里面供用戶下載
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!