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

Java Web運用法式完成基本的文件下載功效的實例講授

編輯:關於JAVA

Java Web運用法式完成基本的文件下載功效的實例講授。本站提示廣大學習愛好者:(Java Web運用法式完成基本的文件下載功效的實例講授)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Web運用法式完成基本的文件下載功效的實例講授正文


基本思緒:
之前的思緒一向是彈出一個框問用戶想要寄存文件的地位,然後我再生成個文件放到那。但是我這個設法主意並沒有勝利。
點擊鏈接來下載文件的方法很輕便,後台把文件流輸入來,經由過程閱讀器完成下載功效,包含訊問地位與文件寄存,年夜多半閱讀器會設置裝備擺設一個固定地位,紛歧定每次都問。
前端就異常簡略了,一個<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中獲得文件,如許也行。


實例

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 {
 
 // 完成防盜鏈功效
 // 取得 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"); // 設置新聞體的編碼
 
 
 // 經由過程 http 協定 發送的http呼應新聞頭 不克不及湧現中文 中文必需要經由url編碼
 String filename = URLEncoder.encode("美男.jpg", "utf-8");
 
 // 告訴閱讀器以下載的方法讀取資本
 response.setHeader("content-disposition", "attachment;filename="+filename);
 
 // 讀取圖片數據 發給ie閱讀器
 String webPath = "/download/美男.jpg"; // 相當於以後web運用的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);
 }
 
}

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