1. 程式人生 > >Struts1.x多檔案上傳問題

Struts1.x多檔案上傳問題

最近有個專案要用Struts1.x來做多檔案上傳,就是使用者可以在前臺動態新增任意多個檔案,然後上傳到伺服器上。這裡檔案個數不定,所有沒有定義到ActionForm裡。於是這時候想到了Apache的FileUpload元件,但是這個元件需要通過解析HttpServletRequest物件來獲取所有上傳的檔案物件。而通過Struts1.x的所有request都被包裝成MultipartRequestWrapper,此時再在Action裡再來解析request物件就不能獲取到上傳的FileItem物件。查看了以下Struts1.x的原碼,發現,其實我們可以有一種work around的方法來獲取FileItem物件,見如下方法

public Map<String, FileItem> getFileItem(ActionForm form)
    
throws GuiException 

    Map
<String, FileItem> map =new HashMap<String, FileItem>(); 
    
    
try{
        Hashtable ht 
= form.getMultipartRequestHandler().getFileElements();
        Iterator it 
= ht.keySet().iterator();
        
while( it.hasNext() ) {
            Object obj 
= ht.get(it.next());
            Field field 
= obj.getClass().getDeclaredField("fileItem");
            
ifnull!= field ) {
                field.setAccessible(
true);
                FileItem fileItem 
= (FileItem)field.get(obj);
                map.put(fileItem.getFieldName(), fileItem);
            }

        }

    }
catch( Exception ex) {
            
thrownew GuiException(null, ex.getMessage());
    }

    
return map;
}

此方法是通過反射來獲取Struts類中一個私有的成員變數來獲取上傳的檔案物件的,當然這只是一個臨時的解決辦法,並且如果要更換Struts版本,最好還是要去再測試一下,以防止類有變化。

說到這裡,其實我們還有一種辦法可以參考,就是使用Filter,我們可以新增一個FileUploadFilter來在struts處理之前獲取FileItem物件並且用request.setAttribute方法放入request物件中。當然這只是一個想法,沒有具體測試過。
 

相關推薦

Struts1.x檔案問題

最近有個專案要用Struts1.x來做多檔案上傳,就是使用者可以在前臺動態新增任意多個檔案,然後上傳到伺服器上。這裡檔案個數不定,所有沒有定義到ActionForm裡。於是這時候想到了Apache的FileUpload元件,但是這個元件需要通過解析HttpServletReq

struts 1.x檔案

<html:form action="/CFIS_AlbumAddPhotos.do" enctype="multipart/form-data" method="post"> image1 : <html:file propert

struts2.x檔案(使用註解)

一般網站都會提供檔案的上傳與下載的功能,尤其是資料管理型網站。剛好在工作中需要用到,就提前學習了一下,並建了一個maven工程做練習。 1.      本工程使用maven建立工程,是為了省去包匯入細節,其中maven工程的pom.xml檔案主要如下: <!--

相容ie8的檔案

在HTML5中,表單元素有一個新的屬性multiple,可實現多選功能。 <input type="file" multiple>這樣就可以實現多檔案上傳,但是此方法不相容ie8等低版本瀏覽器。所以專案中我使用的是百度的WebUpload外掛,此外掛在ie中底層使用flas

用Ajax提交檔案表單

function test(){ var form = new FormData(document.getElementById(“表單id”)); $ .ajax({     url:“表單提交路徑”,   &nb

SpringBoot檔案檔案下載

1、前端的form表單: <form id="form"  action="controller層的多檔案上傳方法訪問路徑" method="post" enctype="multipart/form-data"> <input  type="file" n

第30講 .struts2檔案

1在專案中,HeadFirstStruts2chapter08,新建filesUpload.jsp檔案 <%@ page language="java" contentType="text/html; charset=UTF-8"   &nbs

TP5實現檔案及展示

view層上傳: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body&

webuploader實現檔案

問題:  1: 上傳失敗,不知道怎麼在服務端寫返回值?  2: 做個多檔案上傳怎麼辦?  1:上傳失敗,不知道怎麼在服務端寫返回值? (1):首先在初始化Web Uploader  的方法寫上 server: 'http://localho

在SSM框架中使用AJAX實現檔案

今天來學習一下在SSM框架中使用ajax實現檔案的上傳。 1.首先我們需要一個搭建好的SSM框架專案,這個在這篇文章裡不是重點,自行先搭建好需要的專案。 這裡我是用的jsp頁面來和後臺介面關聯,在jsp檔案中我們需要一個form表單,請求方法為POST,enctype="mu

fastDFS+LibreOffice檔案(二)前端部分:修改按鈕樣式和後在頁面顯示

一:修改上傳按鈕樣式 原來的<input type="file"/>太醜了,所以我自己設定了樣式。方法:在<input type="file"/>上面加一層div,遮住它。 .upload{ padding: 0px 25px; line-height

Spring Boot 單檔案檔案,以及將檔案寫入響應中

單檔案上傳 配置檔案設定 @Component public class MultipartConfig { @Bean public MultipartConfigElement multipartConfigElement(){ Multipa

fastDFS+LibreOffice檔案(二)後端部分:檔案資訊轉json字串儲存資料庫(Gson和org.json兩種方式)

需要注意的地方: 1)如果你複製我的程式碼到你的程式上報錯,可以看看我第一篇文章實體類跟配置檔案的設定:https://blog.csdn.net/qq_36688143/article/details/84162924 第二篇檔案上傳前端頁面的程式碼: https://blog.c

Java架構-Spring mvc+oss儲存+fileupload檔案實現SSO單點登入模板管理

之前給大家介紹了sso的相關知識點和整合方案,考慮到每個系統所屬行業的不同,這邊針對於不同行業做了一些統一的sso單點登入介面模板,使用fileupload多檔案上傳+OSS阿里雲端儲存方案。 1. 阿里雲oss儲存Utils Java程式碼 2. 阿里雲配

SWFUpload檔案使用指南

SWFUpload是一個flash和js相結合而成的檔案上傳外掛,其功能非常強大。以前在專案中用過幾次,但它的配置引數太多了,用過後就忘記怎麼用了,到以後要用時又得到官網上看它的文件,真是太煩了。所以索性就把它的用法記錄下來,也方便英語拙計的同學檢視,利人利己,一勞永逸。(ps:SWFUpload早就不再更新

php進階——02 檔案

前言 使用MVC的思想去封裝一個多檔案上傳類,入口檔案為index.php,檢視檔案有single和group2個html檔案,controller有upload.class.php。 index.php // 1.定義根目錄常量FILEROOT

plupload 檔案

情況1:各自傳各自的     https://www.sojson.com/blog/214.html //觸發的id var ids = new Array("cardzmbtn","cardbmbtn","cardzmbtn-img","cardbmbtn-

Java Web FormData格式資料流實現檔案

1.html <``input type="file" multiple="multiple" accept="image/gif, image/jpeg, image/png, image/jpg, image/bmp" /> 2.JS $(document).on("ch

java實現檔案01

1、html程式碼 <html> <head> <link rel="stylesheet" type="text/css" href="table.css" /> <link rel="stylesheet" type="text/css"