最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Web端程序?qū)崿F(xiàn)文件下載的方法分享

 更新時間:2016年05月25日 18:37:50   作者:死神的喪鐘  
這篇文章主要介紹了Java Web端程序?qū)崿F(xiàn)文件下載的方法分享,包括一個包含防盜鏈功能的專門針對圖片下載的程序代碼示例,需要的朋友可以參考下

Web文件下載有兩種,一種是文件在網(wǎng)站目錄下,在瀏覽器中直接輸入文件路徑即可下載,如http://www.xxx.com/file.zip。另外一種是文件不在網(wǎng)站目錄下或者文件是動態(tài)生成的(導(dǎo)出報表或者導(dǎo)出excel等),這種情況需要通過response的OutputStream實現(xiàn)文件的下載。DownloadUtils是一個Java Web文件下載工具類,提供多種靜態(tài)方法實現(xiàn)文件下載。

package com.rhui.util; 
 
import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.URLEncoder; 
 
import javax.servlet.http.HttpServletResponse; 
 
import org.apache.commons.lang3.StringUtils; 
 
/** 
 * 文件下載類 
 */ 
public class DownloadUtils { 
  /** 
   * 文件下載編碼 
   * 該編碼告訴瀏覽器文件名的編碼方式,以防下載中文文件名時有亂碼 
   */ 
  private static String encoding = "utf-8"; 
   
  /** 
   * 文件下載 
   * @param response 
   * @param filePath 文件在服務(wù)器上的路徑,包含文件名 
   */ 
  public static void download(HttpServletResponse response, String filePath){ 
    File file = new File(filePath.toString()); 
    download(response, file, null, encoding); 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param filePath 文件在服務(wù)器上的路徑,包括文件名稱 
   * @param fileName 文件下載到瀏覽器的名稱,如果不想讓瀏覽器下載的文件名稱和服務(wù)器上的文件名稱一樣,請設(shè)置該參數(shù) 
   */ 
  public static void download(HttpServletResponse response, String filePath, String fileName){ 
    File file = new File(filePath.toString()); 
    download(response, file, fileName, encoding); 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param filePath 文件在服務(wù)器上的路徑,包括文件名稱 
   * @param fileName 文件下載到瀏覽器的名稱,如果不想讓瀏覽器下載的文件名稱和服務(wù)器上的文件名稱一樣,請設(shè)置該參數(shù) 
   * @param encoding 文件名稱編碼 
   */ 
  public static void download(HttpServletResponse response, String filePath, String fileName, String encoding){ 
    File file = new File(filePath.toString()); 
    download(response, file, fileName, encoding); 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param file 文件 
   * @param fileName 文件下載到瀏覽器的名稱,如果不想讓瀏覽器下載的文件名稱和服務(wù)器上的文件名稱一樣,請設(shè)置該參數(shù) 
   */ 
  public static void download(HttpServletResponse response, File file) { 
    download(response, file, null, encoding); 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param file 文件 
   * @param fileName 文件下載到瀏覽器的名稱,如果不想讓瀏覽器下載的文件名稱和服務(wù)器上的文件名稱一樣,請設(shè)置該參數(shù) 
   */ 
  public static void download(HttpServletResponse response, File file, String fileName) { 
    download(response, file, fileName, encoding); 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param file 文件 
   * @param fileName 文件下載到瀏覽器的名稱,如果不想讓瀏覽器下載的文件名稱和服務(wù)器上的文件名稱一樣,請設(shè)置該參數(shù) 
   * @param encoding 文件名稱編碼 
   */ 
  public static void download(HttpServletResponse response, File file, String fileName, String encoding) { 
    if(file == null || !file.exists() || file.isDirectory()){ 
      return; 
    } 
     
    // 如果不指定文件下載到瀏覽器的名稱,則使用文件的默認(rèn)名稱 
    if (StringUtils.isBlank(fileName)) { 
      fileName = file.getName(); 
    } 
 
    try { 
      InputStream is = new FileInputStream(file); 
      download(response, is, fileName, encoding); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param is 文件輸入流 
   * @param fileName 下載的文件名稱 
   * @throws IOException 
   */ 
  public static void download(HttpServletResponse response, InputStream is, String fileName){ 
    download(response, is, fileName, encoding); 
  } 
   
  /** 
   * 文件下載 
   * @param response 
   * @param is 文件輸入流 
   * @param fileName 下載的文件名稱 
   * @param encoding 編碼格式 
   */ 
  public static void download(HttpServletResponse response, InputStream is, String fileName, String encoding){ 
    if(is == null || StringUtils.isBlank(fileName)){ 
      return; 
    } 
     
    BufferedInputStream bis = null; 
    OutputStream os = null; 
    BufferedOutputStream bos = null; 
     
    try{ 
      bis = new BufferedInputStream(is); 
      os = response.getOutputStream(); 
      bos = new BufferedOutputStream(os); 
      response.setContentType("application/octet-stream;charset=" + encoding); 
      response.setCharacterEncoding(encoding); 
      response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, encoding)); 
      byte[] buffer = new byte[1024]; 
      int len = bis.read(buffer); 
      while(len != -1){ 
        bos.write(buffer, 0, len); 
        len = bis.read(buffer); 
      } 
       
      bos.flush(); 
    }catch(IOException e){ 
      e.printStackTrace(); 
    }finally{ 
      if(bis != null){ 
        try{ 
          bis.close(); 
        }catch(IOException e){} 
      } 
       
      if(is != null){ 
        try{ 
          is.close(); 
        }catch(IOException e){} 
      } 
    } 
  } 
 
  public static String getEncoding() { 
    return encoding; 
  } 
 
  public static void setEncoding(String encoding) { 
    DownloadUtils.encoding = encoding; 
  } 
} 

如果文件保存在服務(wù)器的非網(wǎng)站目錄下

String filePath = "c:\\file.zip"; 
DownloadUtils.download(response, filePath); 

如果文件是輸入流

// is為文件輸入流 
// fileName為瀏覽器下載的文件名稱 
// encoding為文件名稱編碼,預(yù)防文件中有中文的時候產(chǎn)生亂碼 
String fileName = "file.zip"; 
String encoding = "utf-8"; 
DownloadUtils.download(response, is, fileName, encoding); 

Servlet中文件下載

package com.rhui.web.servlet; 
 
import java.io.IOException; 
 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import com.rhui.util.DownloadUtils; 
 
@WebServlet("/download/servlet") 
public class DownloadServlet extends HttpServlet { 
  private static final long serialVersionUID = 1L; 
   
  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String filePath = "c:\\file.zip"; 
    DownloadUtils.download(response, filePath); 
  } 
 
} 

PS:圖片下載(含防盜鏈功能)

package cn.itcast.day06.web.servlet;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class DownloadServlet extends HttpServlet {
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 
 // 實現(xiàn)防盜鏈功能
 // 獲得 referer 頭 用于說明來訪者來自哪里
 String referer = request.getHeader("referer");
 if(referer==null || !referer.startsWith("http://localhost")) {
  // 是盜鏈者
  response.sendRedirect("/day06/index.jsp");
  return ;
 }
 
 
 // 解決response中文亂碼問題
 response.setContentType("text/html;charset=utf-8"); // 設(shè)置消息體的編碼
 
 
 // 通過 http 協(xié)議 發(fā)送的http響應(yīng)消息頭 不能出現(xiàn)中文 中文必須要經(jīng)過url編碼
 String filename = URLEncoder.encode("美女.jpg", "utf-8");
 
 // 通知瀏覽器以下載的方式讀取資源
 response.setHeader("content-disposition", "attachment;filename="+filename);
 
 // 讀取圖片數(shù)據(jù) 發(fā)給ie瀏覽器
 String webPath = "/download/美女.jpg"; // 相當(dāng)于當(dāng)前web應(yīng)用的path
 
 ServletContext servletContext = super.getServletContext();
 
 InputStream in = servletContext.getResourceAsStream(webPath);
 
 
 OutputStream out = response.getOutputStream();
 
 
 int len;
 byte[] buffer = new byte[1024];
 while((len=in.read(buffer))!=-1)
  out.write(buffer, 0, len);
 
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 doGet(request, response);
 }
 
}

相關(guān)文章

  • 詳解Java中多進(jìn)程編程的實現(xiàn)

    詳解Java中多進(jìn)程編程的實現(xiàn)

    這篇文章主要介紹了詳解Java中多進(jìn)程編程的實現(xiàn),和多線程一樣,多進(jìn)程同樣是實現(xiàn)并發(fā)的一種方式,需要的朋友可以參考下
    2015-11-11
  • k8s解決java服務(wù)下載超時問題小結(jié)

    k8s解決java服務(wù)下載超時問題小結(jié)

    我們在走ingress的java程序的時候,往往會有導(dǎo)出數(shù)據(jù)的功能,這個時候就會有因網(wǎng)絡(luò)慢、后臺處理時間過長導(dǎo)致下載超時,也有因下載文件太大,導(dǎo)致下載失敗,下面給分享k8s解決java服務(wù)下載超時問題,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • springboot中pom.xml文件注入test測試依賴時報錯的解決

    springboot中pom.xml文件注入test測試依賴時報錯的解決

    這篇文章主要介紹了springboot中pom.xml文件注入test測試依賴時報錯的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 通過Java實現(xiàn)設(shè)置Word文檔頁邊距的方法詳解

    通過Java實現(xiàn)設(shè)置Word文檔頁邊距的方法詳解

    頁邊距是指頁面的邊線到文字的距離。通??稍陧撨吘鄡?nèi)部的可打印區(qū)域中插入文字和圖形等。今天這篇文章將為您展示如何通過編程方式,設(shè)置Word?文檔頁邊距,感興趣的可以了解一下
    2023-02-02
  • 完美解決Java獲取文件路徑出現(xiàn)亂碼的問題

    完美解決Java獲取文件路徑出現(xiàn)亂碼的問題

    今天小編就為大家分享一篇完美解決Java獲取文件路徑出現(xiàn)亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • SpringBoot2.x版本中,使用SpringSession踩的坑及解決

    SpringBoot2.x版本中,使用SpringSession踩的坑及解決

    這篇文章主要介紹了SpringBoot2.x版本中,使用SpringSession踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 如何根據(jù)帶賬號密碼的WSDL地址生成JAVA代碼

    如何根據(jù)帶賬號密碼的WSDL地址生成JAVA代碼

    這篇文章主要介紹了如何根據(jù)帶賬號密碼的WSDL地址生成JAVA代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java OpenCV4.0.0實現(xiàn)實時人臉識別

    Java OpenCV4.0.0實現(xiàn)實時人臉識別

    這篇文章主要為大家詳細(xì)介紹了Java OpenCV4.0.0實現(xiàn)實時人臉識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java定時器例子_動力節(jié)點Java學(xué)院整理

    Java定時器例子_動力節(jié)點Java學(xué)院整理

    本文給大家分享了java定時器例子,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-05-05
  • Java關(guān)于IO流的全面介紹

    Java關(guān)于IO流的全面介紹

    下面小編就為大家?guī)硪黄狫ava關(guān)于IO流的全面介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08

最新評論

微山县| 鄯善县| 泽普县| 长顺县| 鄂伦春自治旗| 建昌县| 望城县| 乌苏市| 石城县| 醴陵市| 成武县| 临邑县| 霍邱县| 莱芜市| 深州市| 抚远县| 于田县| 天等县| 广东省| 瑞安市| 泰宁县| 桦甸市| 承德县| 高邑县| 特克斯县| 呼图壁县| 元朗区| 中江县| 德化县| 林芝县| 古蔺县| 洪洞县| 马尔康县| 盈江县| 邹平县| 长武县| 株洲市| 镇巴县| 林甸县| 广宁县| 蒲江县|