日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

servlet文件上传下载_Servlet上传文件和下载文件示例

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 servlet文件上传下载_Servlet上传文件和下载文件示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

servlet文件上傳下載

Java Web應用程序中的文件上載和下載以及常見任務。 由于最近我寫了很多有關Java servlet的文章 ,因此我想提供一個使用servlet上傳和下載文件的示例示例。

用例

我們的用例是提供一個簡單HTML頁面,客戶端可以在其中選擇要上傳到服務器的本地文件。 在提交上傳文件的請求后,我們的Servlet程序會將文件上傳到服務器中的目錄中,然后提供URL,用戶可以通過該URL下載文件。 出于安全原因,不會為用戶提供下載文件的直接URL,而是會為他們提供下載文件的鏈接,并且我們的Servlet將處理請求并將文件發送給用戶。

我們將在Eclipse中創建一個動態Web項目,項目結構如下圖所示。

讓我們研究一下Web應用程序的所有組件并了解實現。

用于上傳文件HTML頁面

我們可以通過向Servlet發送發布請求并提交表單來將文件上傳到服務器。 我們無法使用GET方法上傳文件。 還要注意的一點是,表單的enctype應該是multipart / form-data 。 要從用戶文件系統中選擇文件,我們需要使用類型file的 輸入元素。 因此,我們可以使用一個簡單HTML頁面將文件上傳為:

index.html

<html> <head></head> <body> <form action="UploadDownloadFileServlet" method="post" enctype="multipart/form-data"> Select File to Upload:<input type="file" name="fileName"> <br> <input type="submit" value="Upload"> </form> </body> </html>

服務器文件位置

我們需要將文件存儲到服務器上的某個目錄中,我們可以在程序中對這個目錄進行硬編碼,但是為了獲得更好的靈活性,我們將在部署描述符上下文參數中將其保持可配置狀態。 另外,我們會將上傳文件的html頁面添加到歡迎文件列表中。

我們的web.xml文件如下所示:

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>ServletFileUploadDownloadExample</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><context-param><param-name>tempfile.dir</param-name><param-value>tmpfiles</param-value></context-param> </web-app>

ServletContextListener實現

由于我們需要讀取文件位置的上下文參數并從中創建File對象,因此可以在初始化上下文時編寫ServletContextListener來執行此操作。 我們可以將絕對目錄位置和File對象設置為上下文屬性,以供其他servlet使用。

我們的ServletContextListener實現代碼如下。

FileLocationContextListener.java

package com.journaldev.servlet;import java.io.File;import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener;@WebListener public class FileLocationContextListener implements ServletContextListener {public void contextInitialized(ServletContextEvent servletContextEvent) {String rootPath = System.getProperty("catalina.home");ServletContext ctx = servletContextEvent.getServletContext();String relativePath = ctx.getInitParameter("tempfile.dir");File file = new File(rootPath + File.separator + relativePath);if(!file.exists()) file.mkdirs();System.out.println("File Directory created to be used for storing files");ctx.setAttribute("FILES_DIR_FILE", file);ctx.setAttribute("FILES_DIR", rootPath + File.separator + relativePath);}public void contextDestroyed(ServletContextEvent servletContextEvent) {//do cleanup if needed}}

文件上傳下載Servlet實現

對于文件上傳,我們將使用Apache Commons FileUpload實用程序,對于我們的項目,我們使用版本1.3,FileUpload依賴于Apache Commons IO jar,因此我們需要將兩者都放置在項目的lib目錄中,如您在上面看到的那樣項目結構的圖像。

我們將使用DiskFileItemFactory工廠,該工廠提供一種方法來解析HttpServletRequest對象并返回FileItem的列表。 FileItem提供了有用的方法來獲取文件名,字段名,格式,大小和需要上載的文件的內容類型的詳細信息。 要將文件寫入目錄,我們要做的就是創建一個File對象,并將其作為參數傳遞給FileItem write()方法。

由于Servlet的全部目的是上傳文件,因此我們將重寫init()方法來初始化Servlet的DiskFileItemFactory對象實例。 我們將在doPost()方法實現中使用此對象將文件上傳到服務器目錄。

成功上傳文件后,我們將使用URL向客戶端發送響應以下載文件,因為HTML鏈接使用GET方法,因此我們將在URL中添加文件名參數,并且可以使用相同的servlet doGet()方法實施文件下載過程。

為了實現下載文件servlet,首先,我們將打開文件的InputStream并使用ServletContext.getMimeType()方法獲取文件的MIME類型并將其設置為響應內容類型。

我們還需要將響應內容的長度設置為文件的長度。 為了確保客戶理解我們正在發送文件作為響應,我們需要將“ Content-Disposition ”標頭設置為“ attachment”。 filename =“ fileName ”。

完成設置響應配置后,我們可以從InputStream讀取文件內容并將其寫入ServletOutputStream并將輸出刷新到客戶端。

我們的UploadDownloadFileServlet Servlet的最終實現如下所示。

UploadDownloadFileServlet.java

package com.journaldev.servlet;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Iterator; import java.util.List;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; 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("/UploadDownloadFileServlet") public class UploadDownloadFileServlet extends HttpServlet {private static final long serialVersionUID = 1L;private ServletFileUpload uploader = null;@Overridepublic void init() throws ServletException{DiskFileItemFactory fileFactory = new DiskFileItemFactory();File filesDir = (File) getServletContext().getAttribute("FILES_DIR_FILE");fileFactory.setRepository(filesDir);this.uploader = new ServletFileUpload(fileFactory);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String fileName = request.getParameter("fileName");if(fileName == null || fileName.equals("")){throw new ServletException("File Name can't be null or empty");}File file = new File(request.getServletContext().getAttribute("FILES_DIR")+File.separator+fileName);if(!file.exists()){throw new ServletException("File doesn't exists on server.");}System.out.println("File location on server::"+file.getAbsolutePath());ServletContext ctx = getServletContext();InputStream fis = new FileInputStream(file);String mimeType = ctx.getMimeType(file.getAbsolutePath());response.setContentType(mimeType != null? mimeType:"application/octet-stream");response.setContentLength((int) file.length());response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");ServletOutputStream os = response.getOutputStream();byte[] bufferData = new byte[1024];int read=0;while((read = fis.read(bufferData))!= -1){os.write(bufferData, 0, read);}os.flush();os.close();fis.close();System.out.println("File downloaded at client successfully");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {if(!ServletFileUpload.isMultipartContent(request)){throw new ServletException("Content type is not multipart/form-data");}response.setContentType("text/html");PrintWriter out = response.getWriter();out.write("<html><head></head><body>");try {List<FileItem> fileItemsList = uploader.parseRequest(request);Iterator<FileItem> fileItemsIterator = fileItemsList.iterator();while(fileItemsIterator.hasNext()){FileItem fileItem = fileItemsIterator.next();System.out.println("FieldName="+fileItem.getFieldName());System.out.println("FileName="+fileItem.getName());System.out.println("ContentType="+fileItem.getContentType());System.out.println("Size in bytes="+fileItem.getSize());File file = new File(request.getServletContext().getAttribute("FILES_DIR")+File.separator+fileItem.getName());System.out.println("Absolute Path at server="+file.getAbsolutePath());fileItem.write(file);out.write("File "+fileItem.getName()+ " uploaded successfully.");out.write("<br>");out.write("<a href=\"UploadDownloadFileServlet?fileName="+fileItem.getName()+"\">Download "+fileItem.getName()+"</a>");}} catch (FileUploadException e) {out.write("Exception in uploading file.");} catch (Exception e) {out.write("Exception in uploading file.");}out.write("</body></html>");}}

下圖顯示了該項目的示例執行。

您可以從以下網址下載Apache Commons IO jar和Apache Commons FileUpload jar。

  • http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
  • http://commons.apache.org/proper/commons-io/download_io.cgi

更新內容

  • 下載ServletFileUploadDownloadExample項目
  • 查閱有關Servlet異常處理系列的下一篇文章。

傳入的搜索條件:

  • 文件下載servlet

參考: 開發者食譜博客上的JCG合作伙伴 Pankaj Kumar的Servlet上傳文件和下載文件示例 。

翻譯自: https://www.javacodegeeks.com/2013/08/servlet-upload-file-and-download-file-example.html

servlet文件上傳下載

總結

以上是生活随笔為你收集整理的servlet文件上传下载_Servlet上传文件和下载文件示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。