一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java Web項目中實現文件下載功能的實例教程

Java Web項目中實現文件下載功能的實例教程

2020-05-06 11:02longshengguoji JAVA教程

這篇文章主要介紹了Java Web項目中實現文件下載功能的實例教程,分別講解了通過超鏈接實現下載以及通過Servlet程序實現下載的方式,需要的朋友可以參考下

需求:實現一個具有文件下載功能的網頁,主要下載壓縮包和圖片
兩種實現方法:

一:通過超鏈接實現下載
在HTML網頁中,通過超鏈接鏈接到要下載的文件的地址

?
1
2
3
4
5
6
7
8
9
10
11
12
<!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是文檔路徑,本實例的程序結構如下:

Java Web項目中實現文件下載功能的實例教程

程序運行后,可以通過單擊需要下載文檔實現下載

Java Web項目中實現文件下載功能的實例教程

但是這里會出現一個問題,就是單擊下載壓縮包的時候會彈出下載頁面,但是下載圖片的時候瀏覽器就直接打開了圖片,沒有下載。

Java Web項目中實現文件下載功能的實例教程

這是因為通過超鏈接下載文件時,如果瀏覽器可以識別該文件格式,瀏覽器就會直接打開。只有瀏覽器不能識別該文件格式的時候,才會實現下載。因此利用第二種方法實現下載功能。

二:通過Servlet程序實現下載
通過Servlet下載文件的原理是通過servlet讀取目標程序,將資源返回客戶端。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!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

Java Web項目中實現文件下載功能的實例教程

添加代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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服務器,即可實現對壓縮包和對圖片的下載。

Java Web項目中實現文件下載功能的實例教程

Java Web項目中實現文件下載功能的實例教程

 

三、小技巧:
點擊鏈接來下載文件的方式很簡便,后臺把文件流輸出來,通過瀏覽器實現下載功能,包括詢問位置與文件存放,大多數瀏覽器會配置一個固定位置,不一定每次都問。

前端就非常簡單了,一個<a>標簽,href=“后臺方法地址”,如果你的需求不能直接用超鏈接方式,可以在js里寫 window.location.href =“后臺方法地址”。

這樣跳轉到后臺方法后

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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中獲取文件,這樣也行。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品久久久久久久国产潘金莲 | 日本免费三区 | 国产精品福利一区二区亚瑟 | 69pao强力打造免费高速 | 男人视频网 | 日韩欧美国产一区 | 五月天在线视频观看 | 天若有情1992国语版完整版 | 黑人巨 | 欧美一级高清片免费一级 | 99精品久久精品一区二区小说 | 97精品国产自在现线免费观看 | 污软件在线观看 | 亚洲干综合 | 精品湿 | 好大好深视频 | 成人性生交大片免费看软件 | 久久国产综合精品欧美 | 久久全国免费观看视频 | 午夜影院一区二区三区 | 欧美又大又粗又爽视频 | 亚洲 欧美 中文 日韩 另类 | 国产精品www夜色影视 | 久久久久久久久a免费 | 精品人人视屏 | 国产98在线 | 亚洲国产精品一在线观看 | 韩国帅男同gay网站 韩国三级在线播放 | 日本成熟 | 男同精品视频免费观看网站 | 日本韩国推理片免费观看网站 | 久久国产加勒比精品无码 | 扒开斗罗美女了的胸罩和内裤漫画 | 火影小南被爆羞羞网站进入 | 亚洲AV精品一区二区三区不卡 | 亚洲乱码尤物193yw在线播放 | 欧美一区二区三区四区视频 | www.爱情岛论坛 | 美女被吸乳老师羞羞漫画 | 动漫美女羞羞视频 | 免看一级一片一在线看 |