javaweb下載,Javaweb下載功能實現

本文目錄一覽:

Java Web如何實現遠程下載

在項目根路徑中建一個文件夾比如Files專門存放文件,可以在webRoot中建此文件夾,然後你在前台寫一個a標籤,比如這樣

a href=;下載/a

這樣就可以了

JavaWeb下載文件,怎麼獲取文件下載完畢的狀態?

在Javaweb中,上傳下載是經常用到的功能,對於文件上傳,瀏覽器在上傳的過程中是以流的過程將文件傳給伺服器,一般都是使用commons-fileupload這個包實現上傳功能,因為commons-fileupload依賴於commons-io這個包,所以需要下載這兩個包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。

1、搭建環境

創建Web項目,將包導入到項目lib下

2、實現文件上傳

(第一種上傳的方法)

新建upload.jsp頁面

?

12345678910111213141516

%@ page language=”java” contentType=”text/html; charset=UTF-8″  pageEncoding=”UTF-8″%!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”htmlheadmeta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″titleupload file/title/headbody  !–這裡的%=request.getContextPath()%是表示項目的絕對路徑,也就是說不管你以後將項目拷貝到哪個位置,它都會找到準確的路徑 —  form action=”%=request.getContextPath()%/uploadServlet” enctype=”multipart/form-data” method=”post”    span選擇文件:/spaninput type=”file” name=”file1″    input type=”submit” value=”上傳”  /form/body/html

新建處理文件上傳的Servlet

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

package com.load; import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletContext;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 org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet(“/uploadServlet”)public class uploadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;  public uploadServlet() {    super();  }  /* fileupload 包中, HTTP 請求中的複雜表單元素都被看做一個 FileItem 對象;   * FileItem 對象必須由 ServletFileUpload 類中的 parseRequest() 方法解析 HTTP 請求   * (即被包裝之後的 HttpServletRequest 對象)出來,即分離出具體的文本表單和上傳文件   * */  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //通過isMultipartContent()方法:分析請求裡面是不是有文件上的請求,    boolean isMultipart = ServletFileUpload.isMultipartContent(request);    if(isMultipart){      //創建可設置的磁碟節點工廠      DiskFileItemFactory factory = new DiskFileItemFactory();      //獲取請求的上下文信息      ServletContext servletContext = request.getServletContext();      //緩存目錄,每個伺服器特定的目錄      File repository = (File) servletContext.getAttribute(“javax.servlet.context.tempdir”);      //設置伺服器的緩存目錄      factory.setRepository(repository);      //ServletFileUpload 對象的創建需要依賴於 FileItemFactory      //工廠將獲得的上傳文件 FileItem 對象保存至伺服器硬碟,即 DiskFileItem 對象。      ServletFileUpload upload = new ServletFileUpload(factory);      try {        //解析即被包裝之後的 HttpServletRequest對象,既是分離文本表單和上傳文件(http請求會被包裝為HttpServletRequest)        ListFileItem items = upload.parseRequest(request);        for(FileItem item:items){          String fieldName = item.getFieldName();           String fileName = item.getName();          String contentType = item.getContentType();          boolean isInMemory = item.isInMemory();          long sizeInBytes = item.getSize();          //實例化一個文件          //request.getRealPath(獲取真實路徑)          File file = new File(request.getRealPath(“/”)+”/loads”+fileName.substring(fileName.lastIndexOf(“\\”)+1,fileName.length()));          item.write(file);        }      } catch (FileUploadException e) {        e.printStackTrace();      } catch (Exception e) {                 e.printStackTrace();      }    }  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

(第二種上傳的方法)

新建Jsp頁面(同上,只是路徑改變下)

?

12345678910111213141516

%@ page language=”java” contentType=”text/html; charset=UTF-8″  pageEncoding=”UTF-8″%!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”htmlheadmeta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″titleupload file/title/headbody  !–這裡的%=request.getContextPath()%是表示項目的絕對路徑,也就是說不管你以後將項目拷貝到哪個位置,它都會找到準確的路徑 —  form action=”%=request.getContextPath()%/uploadservlet1″ enctype=”multipart/form-data” method=”post”    span選擇文件:/spaninput type=”file” name=”file1″    input type=”submit” value=”上傳”  /form/body/html

建立Servlet處理上傳

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

package com.load; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet(“/uploadservlet1″)@MultipartConfig(location=””)public class uploadservlet1 extends HttpServlet {  private static final long serialVersionUID = 1L;  public uploadservlet1() {    super();  }   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    response.setContentType(“text/html;charset=UTF-8”);    request.setCharacterEncoding(“utf-8”);         //取得上傳文件,讀取文件    Part part = request.getPart(“file1”);    //定義一個變數去接收文件名    String filename = null;    //Content-Disposition: 就是當用戶想把請求所得的內容存為一個文件的時候提供一個默認的文件名    //Content-Disposition:告訴瀏覽器以下載的方式打開文件    for (String content : part.getHeader(“content-disposition”).split(“;”)) {      System.out.println(content);      //取得文件名      if (content.trim().startsWith(“filename”)) {        //截取文件名        filename = content.substring(            content.indexOf(‘=’) + 1).trim().replace(“\””, “”);      }    }    //輸出流     OutputStream out = null;     //輸入流     InputStream filecontent = null;     //File.separator 取得系統的分割線等數據     out = new FileOutputStream(new File(“e:/loads” + File.separator + filename));     int read;    //獲得一個輸入流    filecontent = part.getInputStream();    final byte[] bytes = new byte[1024];         while ((read = filecontent.read(bytes)) != -1) {      out.write(bytes, 0, read);    }    System.out.println(“New file ” + filename + ” created at ” + “/loads”);  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    doGet(request, response);  }}

(第三種上傳的方法)

這裡使用的是jspSmartUpload包上傳下載,筆者認為這種上傳下載較為簡單,但是好像不是很多人用,不懂。

創建HTML頁面

?

123456789101112131415161718192021222324252627

!DOCTYPE htmlhtmlheadmeta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″title上傳文件/title/headbody  p /p  p align=”center”上傳文件選擇/p  form method=”post” Action=”../DouploadServlet” enctype=”multipart/form-data”    table width=”75%” border=”1″ align=”center”      trtddiv align=”center”        1.input type=”file” name=”file1″       /div/td/tr        trtddiv align=”center”        2.input type=”file” name=”file2″       /div/td/tr        trtddiv align=”center”        3.input type=”file” name=”file3″       /div/td/tr        trtddiv align=”center”        input type=”submit” name=”Submit” value=”上傳他”      /div/td/tr    /table  /form/body/html

創建Servlet處理上傳文件

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

package com.load; import java.io.IOException;import java.io.PrintWriter; 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 javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext; import com.jspsmart.upload.File;import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;@WebServlet(“/DouploadServlet”)public class DouploadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;       public DouploadServlet() {    super();  }   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    response.setContentType(“text/html;charset=UTF-8”);    PrintWriter out = response.getWriter();    //新建一個智能上傳對象    SmartUpload su = new SmartUpload();    /*     * PageContext pageContext;      HttpSession session;      ServletContext application;      ServletConfig config;      JspWriter out;      Object page = this;      HttpServletRequest request,      HttpServletResponse response      其中page對象,request和response已經完成了實例化,而其它5個沒有實例化的對象通過下面的方式實例化      pageContext = jspxFactory.getPageContext(this, request, response,null, true, 8192, true);     */    //通過Jsp工廠類獲取上下文環境    PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);    //上傳初始化    su.initialize(pagecontext);     //上傳文件    try {      su.upload();      //將上傳文件保存到指定目錄      int count = su.save(“/share”);      out.println(count+”個文件上傳成功!br”+su.toString());    } catch (SmartUploadException e) {      e.printStackTrace();    }         //逐個提取上傳文件信息    for(int i=0;isu.getFiles().getCount();i++){      File file = su.getFiles().getFile(i);      //如果文件不存在      if(file.isMissing()) continue;             //顯示當前文件信息      out.println(“table border=1”);      out.println(“trtd表單項名(FieldName)/td/td”+file.getFieldName()+”/td/tr”);      out.println(“trtd文件長度/tdtd”+file.getSize()+”/td/tr”);      out.println(“trtd文件名/tdtd”+file.getFileName()+”/td/tr”);      out.println(“trtd文件擴展名/tdtd”+file.getFileExt()+”/td/tr”);      out.println(“trtd文件全名/tdtd”+file.getFilePathName()+”/td/tr”);      out.println(“/tablebr”);    }  }   /**   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)   */  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    // TODO Auto-generated method stub    doGet(request, response);  } }

注意:代碼 int count = su.save(“/share”);表示你需要先建個文件夾,所以你可以先在Webcontent建立一個,然後將項目取消部署,再重新部署進去之後就會在運行那邊建立起一個文件夾了!

或者你可以直接找到運行的路徑,然後建立share文件夾。

3、實現文件下載

(第一種文件下載)

注意:該代碼是直接訪問Servlet類的

?

123456789101112131415161718192021222324252627282930313233343536373839404142

package com.load; import java.io.FileInputStream;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;  //直接使用進行下載,但是這個有缺陷,如果下載文件名中有中文,就會變成亂碼現象!@WebServlet(“/download”)public class download extends HttpServlet {  private static final long serialVersionUID = 1L;   public download() {    super();  }  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     response.setContentType(“text/plain;charset=utf-8”);     response.setCharacterEncoding(“utf-8”);     response.setHeader(“Location”,”中文.txt”);     response.setHeader(“Content-Disposition”, “attachment; filename=” + “賬號.txt”);     OutputStream outputStream = response.getOutputStream();     InputStream inputStream = new FileInputStream(“E:/loads”+”/賬號.txt”);     byte[] buffer = new byte[1024];     int i = -1;     while ((i = inputStream.read(buffer)) != -1) {     outputStream.write(buffer, 0, i);     }     outputStream.flush();     outputStream.close();  }  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  } }

(第二種下載方法)

新建jsp頁面選擇下載

%@ page language=”java” contentType=”text/html; charset=UTF-8″

  pageEncoding=”UTF-8″%!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”htmlheadmeta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″title下載/title/headbody  a href=”../DoDownloadServlet?filename=呵呵.txt”點擊下載/a/body/html

創建Servlet類進行下載(注意:該下載如果文件名是中文的話,一樣會出現亂碼現象)

package com.load;

 import java.io.BufferedInputStream;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.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext; import org.hsqldb.lib.StringUtil; import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException; @WebServlet(“/DoDownloadServlet”)public class DoDownloadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;   public DoDownloadServlet() {    super();  }   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //得到下載文件的名稱    //String filename = request.getParameter(“filename”);    //String filename = new String(FileName.getBytes(“iso8859-1″),”UTF-8”);    //新建SmartUpload對象    SmartUpload su = new SmartUpload();    PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);    //上傳初始化    su.initialize(pagecontext);    //設置禁止打開該文件    su.setContentDisposition(null);    //下載文件    try {      su.downloadFile(“/listener/”+filename);    } catch (SmartUploadException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

(第三種下載的方法)

同上的jsp頁面代碼,這裡就不再重複了。

新建Serlvet類,實現下載功能(注意:這裡文件名就算是中文名,也不會出現亂碼問題了!)

package com.load;

 import java.io.BufferedInputStream;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.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext; import org.hsqldb.lib.StringUtil; import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException; @WebServlet(“/DoDownloadServlet”)public class DoDownloadServlet extends HttpServlet {  private static final long serialVersionUID = 1L;   public DoDownloadServlet() {    super();  }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //獲得文件名稱    String path1 = request.getParameter(“filename”);    //獲得路徑名稱    String path = request.getSession().getServletContext().getRealPath(“/listener/”+path1);     // path是根據日誌路徑和文件名拼接出來的     File file = new File(path);     String filename = file.getName();    try {       //判斷是否是IE11       Boolean flag= request.getHeader(“User-Agent”).indexOf(“like Gecko”)0;      //IE11 User-Agent字元串:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko      //IE6~IE10版本的User-Agent字元串:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.0; Trident/6.0)        if (request.getHeader(“User-Agent”).toLowerCase().indexOf(“msie”) 0||flag){          filename = URLEncoder.encode(filename, “UTF-8″);//IE瀏覽器        }else {        //先去掉文件名稱中的空格,然後轉換編碼格式為utf-8,保證不出現亂碼,        //這個文件名稱用於瀏覽器的下載框中自動顯示的文件名        filename = new String(filename.replaceAll(” “, “”).getBytes(“UTF-8”), “ISO8859-1”);        //firefox瀏覽器        //firefox瀏覽器User-Agent字元串:        //Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0        } InputStream fis = new BufferedInputStream(new FileInputStream(path));        byte[] buffer;        buffer = new byte[fis.available()];         fis.read(buffer);         fis.close();         response.reset();         response.addHeader(“Content-Disposition”, “attachment;filename=” +filename);         response.addHeader(“Content-Length”, “” + file.length());         OutputStream os = response.getOutputStream();         response.setContentType(“application/octet-stream”);         os.write(buffer);// 輸出文件         os.flush();         os.close();       } catch (IOException e) {        e.printStackTrace();       }        System.out.println(filename);  }   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    doGet(request, response);  }}

《JavaWeb開發實戰1200例(第Ⅱ卷)》epub下載在線閱讀,求百度網盤雲資源

《Java Web開發實戰1200例(第Ⅰ卷)》(盧瀚//王春斌)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:

密碼:m01y  

書名:Java Web開發實戰1200例(第Ⅰ卷)

作者:盧瀚//王春斌

出版社:清華大學

出版年份:2011-1

頁數:909

內容簡介:

《Java Web開發實戰1200例(第1卷)》簡介:《Java Web開發實戰1200例》包括第I卷、第II卷共計1200個例子,《Java Web開發實戰1200例(第1卷)》是第I卷,共計600個例子。

《Java Web開發實戰1200例(第1卷)》以開發人員在項目開發中經常遇到的問題和必須掌握的技術為中心,介紹了應用Java Web進行程序開發的各個方面的知識和技巧,主要包括Java Web編程基礎、文件操作管理、圖形圖像與多媒體技術、窗體應用技術、JSP操作Word與Excel等。全書分6篇23章,共計600個實例和600個經驗技巧。每個實例都是經過作者精心篩選的,具有很強的實用性,其中一些實例是開發人員難於尋覓的解決方案。

《Java Web開發實戰1200例》兩卷共計1200個例子,包括了開發中各個方面最常用的實例,是目前市場上實例最全面的開發類圖書;本書實例來源於多位工程師的多年積累,具有很強的實用性。

《Java Web開發實戰1200例(第1卷)》附帶有配套DVD光碟,光碟中提供有部分實例的視頻和大部分源代碼,讀者稍加修改即可應用。

《Java Web開發實戰1200例(第1卷)》適合Java Web的初學者,如高校學生、求職人員作為練習、速查、學習使用,也適合Java Web程序員參考、查閱。

Javaweb中的文件下載實現

需要在響應頭部加上一些標示,告訴瀏覽器這個是文件下載。

如果你用了框架比如struts,需要加如下配置

result name=”success” type=”stream”

param name=”contentType”application/octet-stream;charset=ISO8859-1/param

param name=”inputName”fileStream/param

param name=”contentDisposition”attachment;filename=”${fileName}”/param

param name=”bufferSize”2048/param

/result

如果沒有用框架,就手動在返回對象添加這些contentType

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197591.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 20:04
下一篇 2024-12-03 20:04

相關推薦

  • Java和Python哪個功能更好

    對於Java和Python這兩種編程語言,究竟哪一種更好?這個問題並沒有一個簡單的答案。下面我將從多個方面來對Java和Python進行比較,幫助讀者了解它們的優勢和劣勢,以便選擇…

    編程 2025-04-29
  • Python每次運行變數加一:實現計數器功能

    Python編程語言中,每次執行程序都需要定義變數,而在實際開發中常常需要對變數進行計數或者累加操作,這時就需要了解如何在Python中實現計數器功能。本文將從以下幾個方面詳細講解…

    編程 2025-04-28
  • Python strip()函數的功能和用法用法介紹

    Python的strip()函數用於刪除字元串開頭和結尾的空格,包括\n、\t等字元。本篇文章將從用法、功能以及與其他函數的比較等多個方面對strip()函數進行詳細講解。 一、基…

    編程 2025-04-28
  • 全能的wpitl實現各種功能的代碼示例

    wpitl是一款強大、靈活、易於使用的編程工具,可以實現各種功能。下面將從多個方面對wpitl進行詳細的闡述,每個方面都會列舉2~3個代碼示例。 一、文件操作 1、讀取文件 fil…

    編程 2025-04-27
  • SOXER: 提供全面的音頻處理功能的命令行工具

    SOXER是一個命令行工具,提供了強大、靈活、全面的音頻處理功能。同時,SOXER也是一個跨平台的工具,支持在多個操作系統下使用。在本文中,我們將深入了解SOXER這個工具,並探討…

    編程 2025-04-27
  • Javaweb 介面返回數據的定義與實現

    本文將介紹 javaweb 如何定義介面返回數據,並提供相應的代碼示例。 一、介面返回數據的定義 在 javaweb 開發中,我們經常需要通過介面返回數據。介面返回的數據格式通常是…

    編程 2025-04-27
  • nobranchesreadyforupload功能詳解

    nobranchesreadyforupload是一個Git自動化工具,能夠在本地Git存儲庫中查找未提交的更改並提交到指定的分支。 一、檢查新建文件是否被提交 Git存儲庫中可能…

    編程 2025-04-25
  • Win FTP:一個功能全面的FTP客戶端

    一、Win FTP的介紹 Win FTP是一款基於Windows系統的FTP客戶端,它具有簡單易用、功能齊全、易於配置等特點。Win FTP的使用範圍非常廣泛,可以用於在本地計算機…

    編程 2025-04-24
  • 全能FTP開發工程師分享:FTP功能介紹與實現

    一、FTP基礎知識 FTP(File Transfer Protocol)是一種傳輸文件的協議,基於客戶機/伺服器模式,通過可靠的TCP連接進行數據傳輸。FTP包括兩個部分:FTP…

    編程 2025-04-24
  • Chrome同步功能詳解

    Chrome是一款非常受歡迎的瀏覽器,不僅擁有快速穩定的瀏覽速度,還有很多實用的功能,其中同步功能就是它的一大特色之一。Chrome同步可以讓用戶將自己的瀏覽器設置、書籤等信息在不…

    編程 2025-04-24

發表回復

登錄後才能評論