文件下载--服务器端编程操作
生活随笔
收集整理的這篇文章主要介紹了
文件下载--服务器端编程操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
創建DownloadServlet// 1.得到要下載 的文件名稱String filename = request.getParameter("filename");//2.判斷文件是否存在File file = new File("d:/upload/" + filename);if (file.exists())//3.進行下載 原理:就是通過response獲取一個輸出流,將要下載的文件內容寫回到瀏覽器端就可以了.注意:要想通過編程的方式,實現文件下載,1.要設置mimetype類型resposne.setContextType(String mimeType);問題:怎樣可以得到要下載文件的mimeType類型?ServletContext.getMimeType(String filename);如果設置了mimeType,瀏覽器能解析的就直接展示了,不能解析的,直接下載.2.設置一個響應頭,設置后的效果,就是無論返回的是否可以被瀏覽器解析,就是下載 。response.setHeader("content-disposition","attachment;filename=下載文件名稱");總結:服務器端編程下載:1.將下載的文件通過resposne.getOutputStream()流寫回到瀏覽器端。2.設置mimeType response.setContentType(getServletContext.getMimeType(String filename));3.設置響應頭,目的是永遠是下載操作response.setHeader("content-disposition","attachment;filename=下載文件名稱");
編寫服務器程序,讀取服務器端文件,完成下載
必須設置兩個頭信息 ,來自MIME協議? Content-Type? Content-Disposition
?
response.setContentType(getServletContext().getMimeType(filename));
response.setHeader("Content-Disposition", "attachment;filename=" + filename); // 以附件形式打開,不管格式瀏覽器是否識別
package cn.learn.web.servlet;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;public class DownloadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.得到要下載 的文件名稱String filename = request.getParameter("filename");filename = new String(filename.getBytes("iso8859-1"), "utf-8");// 解決中文亂碼// 2.在d:/upload目錄下查找這個文件是否存在File file = new File("d:/upload/" + filename);if (file.exists()) {// /文件存在,完成下載// 下載注意事項1--設置下載文件的mimeTypeString mimeType = this.getServletContext().getMimeType(filename);response.setContentType(mimeType);String agent = request.getHeader("user-agent");if (agent.contains("MSIE")) {// IE瀏覽器filename = URLEncoder.encode(filename, "utf-8");} else if (agent.contains("Firefox")) {// 火狐瀏覽器BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8"))+ "?=";} else {// 其它瀏覽器filename = URLEncoder.encode(filename, "utf-8");}// 下載注意事項2--永遠是下載response.setHeader("content-disposition", "attachment;filename="+ filename);FileInputStream fis = new FileInputStream(file); // 讀取要下載文件的內容OutputStream os = response.getOutputStream(); // 將要下載的文件內容通過輸出流寫回到瀏覽器端.int len = -1;byte[] b = new byte[1024 * 100];while ((len = fis.read(b)) != -1) {os.write(b, 0, len);os.flush();}os.close();fis.close();} else {throw new RuntimeException("下載資源不存在.");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}?
總結
以上是生活随笔為你收集整理的文件下载--服务器端编程操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件下载--超连接
- 下一篇: 文件下载乱码问题分析与解决