国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

香港云服务器
服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

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

這篇文章主要介紹了Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程,分別講解了通過(guò)超鏈接實(shí)現(xiàn)下載以及通過(guò)Servlet程序?qū)崿F(xiàn)下載的方式,需要的朋友可以參考下

需求:實(shí)現(xiàn)一個(gè)具有文件下載功能的網(wǎng)頁(yè),主要下載壓縮包和圖片
兩種實(shí)現(xiàn)方法:

一:通過(guò)超鏈接實(shí)現(xiàn)下載
在HTML網(wǎng)頁(yè)中,通過(guò)超鏈接鏈接到要下載的文件的地址

?
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>通過(guò)鏈接下載文件</h1>
<a href="/day06/download/cors.zip">壓縮包</a>
<a href="/day06/download/1.png">圖片</a>
</body>
</html>

其中day06/download是文檔路徑,本實(shí)例的程序結(jié)構(gòu)如下:

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

程序運(yùn)行后,可以通過(guò)單擊需要下載文檔實(shí)現(xiàn)下載

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

但是這里會(huì)出現(xiàn)一個(gè)問(wèn)題,就是單擊下載壓縮包的時(shí)候會(huì)彈出下載頁(yè)面,但是下載圖片的時(shí)候?yàn)g覽器就直接打開了圖片,沒(méi)有下載。

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

這是因?yàn)橥ㄟ^(guò)超鏈接下載文件時(shí),如果瀏覽器可以識(shí)別該文件格式,瀏覽器就會(huì)直接打開。只有瀏覽器不能識(shí)別該文件格式的時(shí)候,才會(huì)實(shí)現(xiàn)下載。因此利用第二種方法實(shí)現(xiàn)下載功能。

二:通過(guò)Servlet程序?qū)崿F(xiàn)下載
通過(guò)Servlet下載文件的原理是通過(guò)servlet讀取目標(biāo)程序,將資源返回客戶端。

?
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>通過(guò)鏈接下載文件</h1>
<a href="/day06/download/cors.zip">壓縮包</a>
<a href="/day06/download/1.png">圖片</a>
<h1>通過(guò)servlet程序下載文件</h1>
<a href="/day06/ServletDownload?filename=cors.zip">壓縮包</a>
<a href="/day06/ServletDownload?filename=1.png">圖片</a>
</body>
</html>

其中,/day06/ServletDownload 是servlet程序的映射路徑
然后新建一個(gè)servlet,名稱為ServletDownload,URL映射為/ServletDownload

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

添加代碼如下:

?
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
     
    //獲得請(qǐng)求文件名
    String filename = request.getParameter("filename");
    System.out.println(filename);
     
    //設(shè)置文件MIME類型
    response.setContentType(getServletContext().getMimeType(filename));
    //設(shè)置Content-Disposition
    response.setHeader("Content-Disposition", "attachment;filename="+filename);
    //讀取目標(biāo)文件,通過(guò)response將目標(biāo)文件寫到客戶端
    //獲取目標(biāo)文件的絕對(duì)路徑
    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服務(wù)器,即可實(shí)現(xiàn)對(duì)壓縮包和對(duì)圖片的下載。

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

 

三、小技巧:
點(diǎn)擊鏈接來(lái)下載文件的方式很簡(jiǎn)便,后臺(tái)把文件流輸出來(lái),通過(guò)瀏覽器實(shí)現(xiàn)下載功能,包括詢問(wèn)位置與文件存放,大多數(shù)瀏覽器會(huì)配置一個(gè)固定位置,不一定每次都問(wèn)。

前端就非常簡(jiǎn)單了,一個(gè)<a>標(biāo)簽,href=“后臺(tái)方法地址”,如果你的需求不能直接用超鏈接方式,可以在js里寫 window.location.href =“后臺(tái)方法地址”。

這樣跳轉(zhuǎn)到后臺(tái)方法后

?
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"; //文件在項(xiàng)目中的路徑
    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(); //重置結(jié)果集
    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");  //設(shè)置數(shù)據(jù)種類
    //獲取返回體輸出權(quán)
    OutputStream os = new BufferedOutputStream(response.getOutputStream());
    os.write(buffer); // 輸出文件
    os.flush();
    os.close();

瀏覽器會(huì)直接識(shí)別這種形式的文件輸出,彈出對(duì)話框。
注意此方法一定要用鏈接方式調(diào)后臺(tái),使用ajax和XMLHttpRequest方式都是不行的,這樣返回的文件流會(huì)返回到方法的回調(diào)函數(shù)中,當(dāng)然如果你想在js中獲取文件,這樣也行。

延伸 · 閱讀

精彩推薦
682
主站蜘蛛池模板: 人人99| 色噜噜狠狠狠综合曰曰曰 | 国产亚洲精品久久19p | 国产高清一区 | 国产乱叫456| 亚洲欧美日韩国产综合精品二区 | 成人看的免费视频 | 免费毛片网站 | 欧美一级在线 | 欧美日韩综合视频 | 久久精品国语 | 久草视频网站 | 国产日韩免费视频 | 国产黄色片一级 | 欧美精品三区 | 亚洲国产青草 | 日韩在线小视频 | 亚洲国产综合在线 | 精品成人在线视频 | 日韩欧美一区二区三区免费观看 | 欧美在线视频网 | 精品一区二区视频 | 欧美精品一区自拍a毛片在线视频 | 91精品国产91久久久久久黑人 | 日韩成人免费中文字幕 | 中文字幕乱码亚洲精品一区 | 亚色在线 | 国产精品久久久久久亚洲调教 | 一本在线 | 欧美激情视频一区二区三区在线播放 | 国产精品美女久久久久久久久久久 | 国产欧美日韩综合精品一区二区 | 国产精品久久久久久婷婷天堂 | 美女久久久久 | 黄色一级毛片 | 免费大片黄在线观看 | 久久成人国产精品 | 成人免费毛片高清视频 | 国产黄色在线网站 | 久久精品一 | 欧美另类视频 |