java組件commons-fileupload實現(xiàn)文件上傳、下載、在線打開
最近做了一個文件上傳、下載、與在線打開文件的功能,剛開始對文件上傳的界面中含有其它表單(例如輸入框、密碼等)在上傳的過程中遇到了許多問題,下面我寫了一個同時實現(xiàn)文件上傳、下載、在線打開文件的測試程序。
首先請看效果圖:
核心代碼:
package com.jefry; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class FileUpload */ public class FileUpload extends HttpServlet { private static final long serialVersionUID = 1L; private static final String fileDir = "F:/"; /** * Default constructor. */ public FileUpload() { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String aFileName = request.getParameter("fileName"); String online = request.getParameter("online"); FileInputStream in = null; ServletOutputStream out = null; boolean isOnLine = online != null ? true : false ; try { if(isOnLine){ URL u = new URL("file:///"+fileDir + aFileName); response.setContentType(u.openConnection().getContentType()); response.setHeader("Content-Disposition", "inline; filename="+aFileName); } else{ response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=" + aFileName); } in = new FileInputStream(fileDir + aFileName); out = response.getOutputStream(); out.flush(); int aRead = 0; while ((aRead = in.read()) != -1 & in != null) { out.write(aRead); } out.flush(); } catch (Throwable e) { e.printStackTrace(); } finally { try { in.close(); out.close(); } catch (Throwable e) { e.printStackTrace(); } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { DiskFileItemFactory fileFactory = new DiskFileItemFactory(); ServletFileUpload fu = new ServletFileUpload(fileFactory); List fileItems = fu.parseRequest(request); Iterator iter = fileItems.iterator(); String uploader = null; String date = null; List<String> fileNames = new ArrayList<String>(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { // 文件 String oldFileName = item.getName(); String newFileName = null; int delimiter = oldFileName.lastIndexOf("/"); if (delimiter == -1) newFileName = oldFileName.substring(delimiter + 1); else newFileName = oldFileName; fileNames.add(newFileName); item.write(new File(fileDir + newFileName)); } else { // 表單 String fieldName = item.getFieldName(); if ("uploader".equals(fieldName)) { uploader = item.getString(); } else if ("date".equals(fieldName)) { date = item.getString(); } } } request.setAttribute("fileNames",fileNames); request.getRequestDispatcher("download.jsp").forward(request, response); } catch (Exception e) { } } }
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="FileUpload" method="post" enctype="multipart/form-data"> <br> 文件一:<input type="file" name="file1" /> <br> 文件二:<input type="file" name="file2" /> <br> 上傳者:<input type="text" name="uploader"/> <br> 日期:<input type="text" name="date"/> <br> <input type="submit" value="提交"/> </form> </body> </html>
download.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@page import="java.util.List"%><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <br> --------------直接下載------------ <br> <% List<String> fileNames = (List<String> )request.getAttribute("fileNames"); for(String fileName : fileNames) { %> <form action="FileUpload" method="get"> <input type="hidden" name="fileName" value="<%=fileName %>" /> <input type="submit" value="下載:<%=fileName %>" /> </form> <% } %> <br> --------------直接打開--------- <% for(String fileName : fileNames) { %> <form action="FileUpload" method="get"> <input type="hidden" name="fileName" value="<%=fileName %>" /> <input type="hidden" name="online" value="yes" /> <input type="submit" value="打開:<%=fileName %>" /> </form> <% } %> </br> </body> </html>
本文已被整理到了《Java上傳操作技巧匯總》,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java組件SmartUpload和FileUpload實現(xiàn)文件上傳功能
- Java中使用fileupload組件實現(xiàn)文件上傳功能的實例代碼
- java使用common-fileupload實現(xiàn)文件上傳
- Java組件commons fileupload實現(xiàn)文件上傳功能
- JavaEE組件commons-fileupload實現(xiàn)文件上傳、下載
- java組件commons-fileupload文件上傳示例
- java組件fileupload文件上傳demo
- java組件commons-fileupload實現(xiàn)文件上傳
- JAVA使用commos-fileupload實現(xiàn)文件上傳與下載實例解析
- 使用fileupload組件實現(xiàn)文件上傳功能
相關(guān)文章
java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列的相關(guān)資料,這里對java中的棧和隊列都做出實現(xiàn)實例來幫助大家理解學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2017-07-07利用數(shù)組實現(xiàn)棧(Java實現(xiàn))
這篇文章主要為大家詳細介紹了利用數(shù)組實現(xiàn)棧,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09spring多數(shù)據(jù)源配置實現(xiàn)方法實例分析
這篇文章主要介紹了spring多數(shù)據(jù)源配置實現(xiàn)方法,結(jié)合實例形式分析了spring多數(shù)據(jù)源配置相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下2019-12-12Java對象級別與類級別的同步鎖synchronized語法示例
這篇文章主要為大家介紹了Java對象級別與類級別的同步鎖synchronized語法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-03-03詳解Lombok安裝及Spring Boot集成Lombok
這篇文章主要介紹了詳解Lombok安裝及Spring Boot集成Lombok,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03Spring事務(wù)管理下synchronized鎖失效問題的解決方法
這篇文章主要給大家介紹了關(guān)于Spring事務(wù)管理下synchronized鎖失效問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-03-03