溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Struts2上傳文件的方法是什么

發(fā)布時(shí)間:2022-09-29 11:45:03 來源:億速云 閱讀:99 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Struts2上傳文件的方法是什么”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Struts2上傳文件的方法是什么”文章能幫助大家解決問題。

Struts2 框架為使用“HTML格式的基于表單的文件上傳”處理文件上傳提供了內(nèi)置支持。當(dāng)一個(gè)文件被上傳時(shí),它通常會(huì)被存儲(chǔ)在一個(gè)臨時(shí)目錄中,它們應(yīng)該被你的 Action 類處理或移動(dòng)到一個(gè)永久目錄中,以確保數(shù)據(jù)不會(huì)丟失。

注意- 服務(wù)器可能有一個(gè)安全策略,禁止您寫入臨時(shí)目錄和屬于您的 Web 應(yīng)用程序的目錄以外的目錄。

Struts 中的文件上傳可以通過名為FileUpload攔截器的預(yù)定義攔截器實(shí)現(xiàn),該攔截器可通過 org.apache.struts2.interceptor.FileUploadInterceptor 類獲得,并作為defaultStack 的一部分包含在內(nèi)。您仍然可以在 struts.xml 中使用它來設(shè)置各種參數(shù),我們將在下面看到。

創(chuàng)建視圖文件

讓我們從創(chuàng)建瀏覽和上傳選定文件所需的視圖開始。因此,讓我們創(chuàng)建一個(gè)帶有純 HTML 上傳表單的index.jsp,允許用戶上傳文件 

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%><%@ taglib prefix = "s" uri = "/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd"><html>
   <head>
      <title>File Upload</title>
   </head>   
   <body>
      <form action = "upload" method = "post" enctype = "multipart/form-data">
         <label for = "myFile">Upload your file</label>
         <input type = "file" name = "myFile" />
         <input type = "submit" value = "Upload"/>
      </form>
   </body></html>

在上面的例子中有幾點(diǎn)值得注意。首先,表單的 enctype 設(shè)置為multipart/form-data。應(yīng)設(shè)置此項(xiàng),以便文件上傳攔截器成功處理文件上傳。下一點(diǎn)要注意的是表單的操作方法upload和文件上傳字段的名稱 - 這是myFile。我們需要這些信息來創(chuàng)建 action 方法和 struts 配置。

接下來,讓我們創(chuàng)建一個(gè)簡單的 jsp 文件success.jsp來顯示我們文件上傳的結(jié)果,以防它成功。

<%@ page contentType = "text/html; charset = UTF-8" %><%@ taglib prefix = "s" uri = "/struts-tags" %><html>
   <head>
      <title>File Upload Success</title>
   </head>   
   <body>
      You have successfully uploaded <s:property value = "myFileFileName"/>
   </body></html>

以下將是結(jié)果文件error.jsp,以防上傳文件時(shí)出現(xiàn)錯(cuò)誤

<%@ page contentType = "text/html; charset = UTF-8" %><%@ taglib prefix = "s" uri = "/struts-tags" %><html>
   <head>
      <title>File Upload Error</title>
   </head>  
   <body>
      There has been an error in uploading the file.   </body></html>

創(chuàng)建動(dòng)作類

接下來,讓我們創(chuàng)建一個(gè)名為uploadFile.java的 Java 類,它將負(fù)責(zé)上傳文件并將該文件存儲(chǔ)在一個(gè)安全的位置 

package com.tutorialspoint.struts2;import java.io.File;import org.apache.commons.io.FileUtils;import java.io.IOException; 
import com.opensymphony.xwork2.ActionSupport;public class uploadFile extends ActionSupport {   private File myFile;   private String myFileContentType;   private String myFileFileName;   private String destPath;   public String execute() {      /* Copy file to a safe location */
      destPath = "C:/apache-tomcat-6.0.33/work/";      try {
         System.out.println("Src File name: " + myFile);
         System.out.println("Dst File name: " + myFileFileName);     	    	 
         File destFile  = new File(destPath, myFileFileName);
         FileUtils.copyFile(myFile, destFile);  
      } catch(IOException e) {
         e.printStackTrace();         return ERROR;
      }      return SUCCESS;
   }   
   public File getMyFile() {      return myFile;
   }   
   public void setMyFile(File myFile) {      this.myFile = myFile;
   }   
   public String getMyFileContentType() {      return myFileContentType;
   }   
   public void setMyFileContentType(String myFileContentType) {      this.myFileContentType = myFileContentType;
   }   
   public String getMyFileFileName() {      return myFileFileName;
   }   
   public void setMyFileFileName(String myFileFileName) {      this.myFileFileName = myFileFileName;
   }
}

該uploadFile.java是一個(gè)非常簡單的類。需要注意的重要一點(diǎn)是 FileUpload 攔截器和 Parameters Interceptor 一起為我們完成了所有繁重的工作。

FileUpload 攔截器默認(rèn)為您提供三個(gè)參數(shù)。它們以以下模式命名 -

[您的文件名參數(shù)] - 這是用戶上傳的實(shí)際文件。在這個(gè)例子中,它將是“myFile”

[您的文件名參數(shù)]ContentType - 這是上傳文件的內(nèi)容類型。在這個(gè)例子中,它將是“myFileContentType”

[您的文件名參數(shù)]FileName - 這是上傳的文件的名稱。在這個(gè)例子中,它將是“myFileFileName”

由于 Struts 攔截器,我們可以使用這三個(gè)參數(shù)。我們所要做的就是在我們的 Action 類中創(chuàng)建三個(gè)具有正確名稱的參數(shù),這些變量會(huì)自動(dòng)為我們自動(dòng)連接。所以,在上面的例子中,我們有三個(gè)參數(shù)和一個(gè) action 方法,如果一切正常,它只會(huì)返回“success”,否則返回“error”。

配置文件

以下是控制文件上傳過程的 Struts2 配置屬性

序號

屬性和描述

1

struts.multipart.maxSize

要作為文件上傳接受的文件的最大大小(以字節(jié)為單位)。默認(rèn)為 250M。

2

struts.multipart.parser

用于上傳多部分表單的庫。默認(rèn)是jakarta

3

struts.multipart.saveDir

存儲(chǔ)臨時(shí)文件的位置。默認(rèn)情況下是 javax.servlet.context.tempdir。

為了更改這些設(shè)置中的任何一個(gè),您可以在應(yīng)用程序 struts.xml 文件中使用常量標(biāo)記,就像我更改要上傳的文件的最大大小一樣。

讓我們的struts.xml如下

<?xml version = "1.0" Encoding = "UTF-8"?><!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
   <constant name = "struts.devMode" value = "true" />
   <constant name = "struts.multipart.maxSize" value = "1000000" />
   <package name = "helloworld" extends = "struts-default">
      <action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
         <result name = "success">/success.jsp</result>
         <result name = "error">/error.jsp</result>
      </action>
   </package></struts>

由于FileUpload攔截器是默認(rèn)攔截器堆棧的一部分,我們不需要明確配置它。但是,您可以在<action>中添加<interceptor-ref>標(biāo)簽。fileUpload 攔截器采用兩個(gè)參數(shù) (a) maximumSize和(b) allowedTypes。

maximumSize 參數(shù)設(shè)置允許的最大文件大小(默認(rèn)值約為 2MB)。allowedTypes 參數(shù)是一個(gè)逗號分隔的接受內(nèi)容 (MIME) 類型列表,如下所示

<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">   <interceptor-ref name = "basicStack">
   <interceptor-ref name = "fileUpload">
      <param name = "allowedTypes">image/jpeg,image/gif</param>
   </interceptor-ref>
   <result name = "success">/success.jsp</result>
   <result name = "error">/error.jsp</result></action>

以下是web.xml文件的內(nèi)容

<?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" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">  
   <display-name>Struts 2</display-name>   
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>   
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher      </filter-class>
   </filter>
   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping></web-app>

現(xiàn)在右鍵單擊項(xiàng)目名稱并單擊“導(dǎo)出”>“WAR 文件”以創(chuàng)建一個(gè) War 文件。然后將此 WAR 部署到 Tomcat 的 webapps 目錄中。最后,啟動(dòng)Tomcat服務(wù)器并嘗試訪問URLhttp://localhost:8080/HelloWorldStruts2/upload.jsp。這將產(chǎn)生以下屏幕

Struts2上傳文件的方法是什么

現(xiàn)在使用瀏覽按鈕選擇一個(gè)文件“Contacts.txt”,然后單擊上傳按鈕,將文件上傳到您的服務(wù)器,您應(yīng)該會(huì)看到下一頁。您可以檢查上傳的文件應(yīng)該保存在 C:\apache-tomcat-6.0.33\work 中。

Struts2上傳文件的方法是什么

請注意,F(xiàn)ileUpload Interceptor 會(huì)自動(dòng)刪除上傳的文件,因此您必須在刪除之前以編程方式將上傳的文件保存在某個(gè)位置。

錯(cuò)誤信息

fileUplaod 攔截器使用幾個(gè)默認(rèn)的錯(cuò)誤消息鍵

序號

錯(cuò)誤信息鍵和描述

1

struts.messages.error.uploading

無法上傳文件時(shí)發(fā)生的一般錯(cuò)誤。

2

struts.messages.error.file.too.large

當(dāng)上傳的文件過大(由maximumSize 指定)時(shí)發(fā)生。

3

struts.messages.error.content.type.not.allowed

當(dāng)上傳的文件與指定的預(yù)期內(nèi)容類型不匹配時(shí)發(fā)生。

可以在WebContent/WEB-INF/classes/messages.properties資源文件中覆蓋這些消息的文本。

關(guān)于“Struts2上傳文件的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI