生活随笔
收集整理的這篇文章主要介紹了
Java文件下载详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.使用HttpServletResponse實現
Servlet代碼:
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//創建要下載的文件的對象(參數為要下載的文件在服務器上的路徑)File serverFile=new File("D:/myText.doc");//設置要顯示在保存窗口的文件名,如果文件名中有中文的話,則要設置字符集,否則會出現亂碼。另外,要寫上文件后綴名String fileName=java.net.URLEncoder.encode("Java編程思想最新版.doc","utf-8");//該步是最關鍵的一步,使用setHeader()方法彈出"是否要保存"的對話框,打引號的部分都是固定的值,不要改變response.setHeader("Content-disposition","attachment;filename="+fileName);/** 以下四行代碼經測試似乎可有可無,可能是我測試的文件太小或者其他什么原因。。。*/response.setContentType("application/msword");//定義下載文件的長度 /字節long fileLength=serverFile.length();//把長整形的文件長度轉換為字符串String length=String.valueOf(fileLength);//設置文件長度(如果是Post請求,則這步不可少)response.setHeader("content_Length",length);/**以上內容僅是下載一個空文件*以下內容用于將服務器中相應的文件內容以流的形式寫入到該空文件中*///獲得一個 ServletOutputStream(向客戶端發送二進制數據的輸出流)對象OutputStream servletOutPutStream=response.getOutputStream();//獲得一個從服務器上的文件myFile中獲得輸入字節的輸入流對象FileInputStream fileInputStream=new FileInputStream(serverFile);byte bytes[]=new byte[1024];//設置緩沖區為1024個字節,即1KBint len=0;//讀取數據。返回值為讀入緩沖區的字節總數,如果到達文件末尾,則返回-1while((len=fileInputStream.read(bytes))!=-1){ //將指定 byte數組中從下標 0 開始的 len個字節寫入此文件輸出流,(即讀了多少就寫入多少)servletOutPutStream.write(bytes,0,len); }servletOutPutStream.close();fileInputStream.close(); }
注1:setContentType(String type)方法里的參數type是指一個用于指定文件內容的MIME類型
常見的MIME類型及含義:
text/html?? 超文本標記語言文本(.html)
text/plain? 普通文本(.txt)
image/gif?? GIF圖形(.gif)
image/jpeg? JPEG圖形(.jpeg或.jpg)
video/x-msvideo? AVI文件(.avi)
application/zip? zip壓縮包(.zip)
application/msword? word文檔(.doc)
application/vnd.ms-excel? excel文檔(.xls)
audio/x-mpeg? mp3音樂文件(.mp3)
jsp代碼:
<body><center><form action="DownLoadServlet" method="post"><a href="javascript:document.forms[0].submit()">單擊下載</a></form></center>
</body>
轉載于:https://www.cnblogs.com/xcxcxcxc/p/5541233.html
總結
以上是生活随笔為你收集整理的Java文件下载详解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。