程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Web項目中完成文件下載功效的實例教程

Java Web項目中完成文件下載功效的實例教程

編輯:關於JAVA

Java Web項目中完成文件下載功效的實例教程。本站提示廣大學習愛好者:(Java Web項目中完成文件下載功效的實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Web項目中完成文件下載功效的實例教程正文


需求:完成一個具有文件下載功效的網頁,重要下載緊縮包和圖片
兩種完成辦法:

一:經由過程超鏈接完成下載
在HTML網頁中,經由過程超鏈接鏈接到要下載的文件的地址

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<h1>經由過程鏈接下載文件</h1> 
<a href="/day06/download/cors.zip">緊縮包</a> 
<a href="/day06/download/1.png">圖片</a> 
</body> 
</html> 

個中day06/download是文檔途徑,本實例的法式構造以下:

法式運轉後,可以經由過程單擊須要下載文檔完成下載

然則這裡會湧現一個成績,就是單擊下載緊縮包的時刻會彈出下載頁面,然則下載圖片的時刻閱讀器就直接翻開了圖片,沒有下載。

這是由於經由過程超鏈接下載文件時,假如閱讀器可以辨認該文件格局,閱讀器就會直接翻開。只要閱讀器不克不及辨認該文件格局的時刻,才會完成下載。是以應用第二種辦法完成下載功效。

二:經由過程Servlet法式完成下載
經由過程Servlet下載文件的道理是經由過程servlet讀取目的法式,將資本前往客戶端。

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<h1>經由過程鏈接下載文件</h1> 
<a href="/day06/download/cors.zip">緊縮包</a> 
<a href="/day06/download/1.png">圖片</a> 
<h1>經由過程servlet法式下載文件</h1> 
<a href="/day06/ServletDownload?filename=cors.zip">緊縮包</a> 
<a href="/day06/ServletDownload?filename=1.png">圖片</a> 
</body> 
</html> 

個中,/day06/ServletDownload 是servlet法式的映照途徑
然後新建一個servlet,稱號為ServletDownload,URL映照為/ServletDownload

添加代碼以下:

package com.lsgjzhuwei.servlet.response; 
 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
/** 
 * Servlet implementation class ServletDownload 
 */ 
@WebServlet(asyncSupported = true, urlPatterns = { "/ServletDownload" }) 
public class ServletDownload extends HttpServlet { 
  private static final long serialVersionUID = 1L; 
     
  /** 
   * @see HttpServlet#HttpServlet() 
   */ 
  public ServletDownload() { 
    super(); 
    // TODO Auto-generated constructor stub 
  } 
 
  /** 
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
   */ 
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
     
    //取得要求文件名 
    String filename = request.getParameter("filename"); 
    System.out.println(filename); 
     
    //設置文件MIME類型 
    response.setContentType(getServletContext().getMimeType(filename)); 
    //設置Content-Disposition 
    response.setHeader("Content-Disposition", "attachment;filename="+filename); 
    //讀取目的文件,經由過程response將目的文件寫到客戶端 
    //獲得目的文件的相對途徑 
    String fullFileName = getServletContext().getRealPath("/download/" + filename); 
    //System.out.println(fullFileName); 
    //讀取文件 
    InputStream in = new FileInputStream(fullFileName); 
    OutputStream out = response.getOutputStream(); 
     
    //寫文件 
    int b; 
    while((b=in.read())!= -1) 
    { 
      out.write(b); 
    } 
     
    in.close(); 
    out.close(); 
  } 
 
  /** 
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
   */ 
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
  } 
 
} 

重啟tomcat辦事器,便可完成對緊縮包和對圖片的下載。

3、小技能:
點擊鏈接來下載文件的方法很輕便,後台把文件流輸入來,經由過程閱讀器完成下載功效,包含訊問地位與文件寄存,年夜多半閱讀器會設置裝備擺設一個固定地位,紛歧定每次都問。

前端就異常簡略了,一個<a>標簽,href=“後台辦法地址”,假如你的需求不克不及直接用超鏈接方法,可以在js裡寫 window.location.href =“後台辦法地址”。

如許跳轉到後台辦法後

String filePath = this.getClass().getClassLoader().getResource("").toURI().getPath()
          + "/exportPdf.pdf"; //文件在項目中的途徑
    File outfile = new File(filePath);
    String filename = outfile.getName();// 獲得文件稱號
    InputStream fis = new BufferedInputStream(new FileInputStream(
          filePath));
    byte[] buffer = new byte[fis.available()]; 
    fis.read(buffer); //讀取文件流
    fis.close();
    response.reset(); //重置成果集
    response.addHeader("Content-Disposition", "attachment;filename="
        + new String(filename.replaceAll(" ", "").getBytes("utf-8"),
        "iso8859-1")); //前往頭 文件名
    response.addHeader("Content-Length", "" + outfile.length()); //前往頭 文件年夜小
    response.setContentType("application/octet-stream");  //設置數據品種
    //獲得前往體輸入權
    OutputStream os = new BufferedOutputStream(response.getOutputStream()); 
    os.write(buffer); // 輸入文件
    os.flush();
    os.close();

閱讀器會直接辨認這類情勢的文件輸入,彈出對話框。
留意此辦法必定要用鏈接方法調後台,應用ajax和XMLHttpRequest方法都是不可的,如許前往的文件流會前往到辦法的回調函數中,固然假如你想在js中獲得文件,如許也行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved