javaWeb中,如何通過Commons-FileUpload組件上傳文件

2021-02-19 雄雄的小課堂


大家好,歡迎來到雄雄的小課堂,今天給大家分享的是《javaWeb中,如何通過Commons-FileUpload組件上傳文件》

前言:文件上傳大家都不陌生,在這個網際網路飛速發展的時代,共享資源已經是常態了,用戶將自己計算機中的文件上傳至伺服器端供別人下載、瀏覽,已經是web項目中最常用的功能了。比如在QQ空間中我們上傳的照片,在博客中我們上傳的工具插件,均離不開文件上傳,那麼,今天我們就來看看,javaweb中,是如何實現文件上傳的?




使用比較簡單,可以直接嵌套在jsp文件中,並且不需要編寫很多的代碼即可完成文件的上傳。除了可以上傳文件以外,還能控制上傳文件的類型以及大小,可以說是即實用又方便。



Commons-FileUpload上傳文件的步驟

給表單中添加屬性,enctype="multipart/form-data",並且表單的提交方式一定是post,不可以是get。

頁面藉助file表單來選擇上傳的文件。

在JSP文件中使用 page指令導入Cormons Filel ploaod組件所需的類。

判斷請求信息中的內容是否是multipart 類型,如果是則進行處理。

通過 FileltemnFactory工廠對象實例化ServletFil lpload對象。

調用 ServletFileUpload對象的parseRequest( )將表單中欄位解析成Fileltem對象的集合。

通過迭代依次處理每個Fileltem 對象,如果是普通欄位,通過getSring( )方法得到相應表 單字符的值,該值與表單欄位中的^name" 屬性對應。如果是文件欄位,則通過File的構造方法構建一個指定路徑名和文件名的文件,並通過Flele對象的wie)方法將上傳文件的內容保存到文件中。 



頁面fileUpload.jsp的代碼:


<body>
    文件上傳:
    <form action="doFile.jsp" method="post" enctype="multipart/form-data" >
      姓名:<input type="text" name="name"/>
      文件:<input type="file" name="fname"/>
      <input type="submit" value="上傳"/>
    </form>
</body>


處理業務doFile.jsp的代碼:


<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'doFile.jsp' starting page</title>
    
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->

  </head>
  
  <body>
      <%
        request.setCharacterEncoding("utf-8");
        String uploadName = ""; //上傳的文件名
        String fileName = ""; //表單裡面name的值
        //請求信息中是否是multipart類型
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        //上傳文件的存儲路徑
        String uploadPath = request.getSession().getServletContext().getRealPath("upload/");
        if(isMultipart){
          FileItemFactory factory = new DiskFileItemFactory();
          ServletFileUpload upload = new ServletFileUpload(factory);
          //解析所有的form表單裡面的文件
          List<FileItem> items = upload.parseRequest(request);
          Iterator<FileItem> iter = items.iterator();
          while(iter.hasNext()){ //一次處理每個文件
            FileItem item = (FileItem)iter.next();
            if(item.isFormField()){ //普通表單
              fileName = item.getFieldName(); //表單欄位的name屬性值
              if(fileName.equals("name")){
                out.print(item.getString("utf-8")+"上傳了文件<br/>");
              }
            }else{
              //文件表單
              String fName = item.getName();
              if(fName!=null&&!fName.equals("")){
                File fullFile = new File(item.getName());
                File saveFile = new File(uploadPath,fullFile.getName());
                item.write(saveFile);
                uploadName= fullFile.getName();
                out.print("上傳成功之後的文件名是:"+uploadName);
              }
            }
          }
        }
        
      
       %>
  </body>
</html>


運行結果如下:






相關焦點

  • jquery uploadify和apache Fileupload實現異步上傳文件示例
    Uploadify + Apache Fileupload異步上傳文件示例1、可以限制上傳文件大小和類型,理論上任何類型的文件都可以上傳(自己根據api配置即可);2、後臺使用Apache commons-fileupload-1.3.1.jar作為上傳工具包,本示例支持一次性多文件上傳;3、文件上傳目錄可以任意指定,請在web.xml中配置;Uploadify api
  • 拆解 UI 組件 el-upload 文件上傳
    el-upload 主要由 3 塊組成:第一部分:文件選擇文件選擇部分是通過對 input 標籤進行封裝,可以看下源碼:<input  type="file"  ref="input"  name={name}  on-change={handleChange
  • 乾貨|Java文件上傳如何實現的?
    在Web應用中,由於大多數文件的上傳都是通過表單的形式提交給伺服器的,因此,要想在程序中實現文件上傳的功能,首先得創建一個用於提交上傳文件的表單頁面
  • 【JavaWeb基礎】文件上傳和下載(修訂版)
    文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y什麼是文件上傳?文件上傳就是把用戶的信息保存起來。為什麼需要文件上傳?在用戶註冊的時候,可能需要用戶提交照片。那麼這張照片就應該要進行保存。上傳組件(工具)為什麼我們要使用上傳工具?為啥我們需要上傳組件呢?
  • 【第1537期】Fusion Next 之 Upload 上傳組件設計思路
    正文從這開始~~Upload 組件設計的目標是解決用戶上傳文件的便利性,但是中後臺 Upload 組件的場景是多種多樣的,所以可擴展能力是 Upload 組件不可忽視的另一方面。關於獲取返回內容如何再給主頁面做反饋展示的代碼可以看這裡: https://github.com/alibaba-fusion/next/blob/master/src/upload/runtime/iframe-uploader.jsx#L73-L79現代上傳方案html5 出來後,可以通過 input 可以直接拿到 File 文件對象,再把 File 封裝到 FormData,通過
  • Apache Commons Fileupload竟存在漏洞,你慌了嗎?
    (文件的的命名也無法控制);影響範圍commons-fileupload<=1.3.2下面進行詳細地分析Payload構造我們首先測試的版本是1.3的版本,JDK是1.8版本,所以這種組合只能達到向任意目錄的文件寫入的漏洞效果。
  • SpringMVC文件上傳下載
    所以這個時候一些具有責任感的公司、組織就把它們的解析方法貢獻出來供大家使用,大家不需了解傳輸文件底層內容,這些開源的處理方式中,最流行的當屬apache旗下開源的commons-fileupload和 commons-io,把兩個jar
  • java web文件上傳與下載
    引言在Web應用中,由於大多數文件的上傳都是通過表單的形式提交給伺服器的,因此,要想在程序中實現文件上傳的功能,首先得創建一個用於提交上傳文件的表單頁面
  • EasyUI的filebox組件實現多文件上傳的步驟
    EasyUI的filebox組件實現多文件上傳的步驟新增回款記錄詳情裡面有個添加回款記錄文件的按鈕,點擊選擇文件,文件既可以選擇一個也可以選擇多個img點擊並拖拽以移動<tr height="35px">
  • 文件上傳與下載
    form標籤的enctype屬性值必須為multipart/form-data值在form標籤中使用input type = file 添加上傳的文件在編寫伺服器代碼(Servlet程序)接收,處理上傳的數據
  • 原創 | 淺談Springboot中的文件上傳
    在JavaWeb應用中,任意文件上傳一直是關注的重點,攻擊者通過上傳惡意jsp文件,可以獲取伺服器權限。
  • 使用jquery.upload.js實現異步上傳示例代碼
    /imageUpload', fileName: 'uploadfile', params: {},dataType: 'json',onSend: function() {return true;},onSubmit: function(){},onComplate: function(data) {if(data.msg){ }else{alert("上傳圖片出錯!")
  • upload-labs文件上傳學習記錄
    的點會自動去除,但是過濾程序不會去除,源碼中deldot()刪除文件末尾的點。④:特殊符號繞過[2]1.php::$DATA上傳後會生成1.php文件,大寫則生成1.PHP。⑤:路徑拼接繞過利用幾種刪除函數隻刪除一次的特性構造文件名刪除末尾的點,去空為1.php.
  • 使用HttpClient實現文件的上傳下載
    一般的情況下我們都是使用Chrome或者其他瀏覽器來訪問一個WEB伺服器,用來瀏覽頁面查看信息或者提交一些數據、文件上傳下載等等。所訪問的這些頁面有的僅僅是一些普通的頁面,有的需要用戶登錄後方可使用,或者需要認證以及是一些通過加密方式傳輸,例如HTTPS。目前我們使用的瀏覽器處理這些情況都不會構成問題。但是一旦我們有需求不通過瀏覽器來訪問伺服器的資源呢?那該怎麼辦呢?
  • Apache Commons 工具集使用簡介
    組件功能介紹BeanUtils提供了對於JavaBean進行各種操作,克隆對象,屬性等等.BetwixtXML與Java對象之間相互轉換.Codec處理常用的編碼方法的工具類包 例如DES、SHA1、MD5、Base64等.Collectionsjava集合框架操作.Compressjava提供文件打包 壓縮類庫.Configuration
  • SpringBoot實現文件上傳、下載到伺服器
    ,下載上傳:文件前端傳入,後端獲取到文件通過輸出流寫入文件下載:獲取到文件路徑,通過輸入流讀取,在通過輸出流寫入文件實現下載#文件上傳大小配置 單個文件大小 總的文件大小spring.servlet.multipart.max-file-size=10MBspring.servlet.multipart.max-request-size
  • 大批量Kindeditor文件上傳事件的漏洞分析
    *上傳功能文件允許被直接調用從而實現上傳htm,html,txt等文件到伺服器,在實際已監測到的安全事件案例中,上傳的htm,html文件中存在包含跳轉到違法色情網站的代碼,攻擊者主要針對黨政機關網站實施批量上傳,建議使用該組件的網站系統儘快做好安全加固配置,防止被惡意攻擊。
  • 文件上傳雜談
    本文案例裡使用的組件來源於組件庫 zent@7.4.4二、常見的上傳場景及實現上傳的形式或場景各式各樣,除了業務級別的封裝外,常遇到的通用場景有如下:重複上傳上傳預覽拖拽上傳上傳裁剪上傳進度可視化文件壓縮上傳前置校驗切片上傳上傳加密暫停&斷網續傳 ...
  • 封裝ThinkPHP6.0通用文件上傳
    本文實例講述了封裝ThinkPHP6通用文件上傳方法,上傳功能使用的是LayUI的upload組件。封裝ThinkPHP6.0通用文件上傳教程一、打開項目在config文件夾下創建upload.php配置文件用來管理文件上傳的後綴和大小<?
  • multer 文件上傳系統在express中的使用
    將生成的storage 對象傳遞給multer方法let upload=multer({storage});filename 用於確定文件夾中的文件名的確定。單個文件將存儲在req.file中。', upload.single('img'), function (req, res, next) { // req.file 是上傳成功文件的信息對象 // req.body 上傳文件時所攜帶的其他文本表單數據})4.2 array接受一個文件名都為fieldname的文件數組。