Struts2-ファイルのアップロード

Struts 2フレームワークは、「HTMLでのフォームベースのファイルアップロード」を使用してファイルアップロードを処理するための組み込みサポートを提供します。ファイルがアップロードされると、通常は一時ディレクトリに保存され、データが失われないように、Actionクラスによって処理または永続ディレクトリに移動する必要があります。

Note −サーバーには、一時ディレクトリおよびWebアプリケーションに属するディレクトリ以外のディレクトリへの書き込みを禁止するセキュリティポリシーが設定されている場合があります。

Strutsでのファイルのアップロードは、と呼ばれる事前定義されたインターセプターを介して可能です。 FileUpload org.apache.struts2.interceptor.FileUploadInterceptorクラスを介して利用可能であり、defaultStack。それでも、struts.xmlでそれを使用して、以下に示すようにさまざまなパラメーターを設定できます。

ビューファイルを作成する

選択したファイルを参照してアップロードするために必要なビューの作成から始めましょう。だから私たちは作成しましょうindex.jsp ユーザーがファイルをアップロードできるプレーンなHTMLアップロードフォーム付き-

<%@ 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>

上記の例では、注目に値する点がいくつかあります。まず、フォームのenctypeがに設定されますmultipart/form-data。これは、ファイルアップロードがファイルアップロードインターセプターによって正常に処理されるように設定する必要があります。次の注意点は、フォームのアクションメソッドですupload およびファイルアップロードフィールドの名前-これは myFile。アクションメソッドと支柱の構成を作成するには、この情報が必要です。

次に、簡単なjspファイルを作成しましょう success.jsp 成功した場合に備えて、ファイルのアップロードの結果を表示します。

<%@ 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>

以下は結果ファイルになります error.jsp ファイルのアップロードでエラーが発生した場合-

<%@ 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>

アクションクラスの作成

次に、というJavaクラスを作成しましょう。 uploadFile.java ファイルのアップロードとそのファイルの安全な場所への保存を処理します-

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非常に単純なクラスです。注意すべき重要なことは、FileUploadインターセプターとParametersインターセプターがすべての面倒な作業を行うことです。

FileUploadインターセプターは、デフォルトで3つのパラメーターを使用できるようにします。それらは次のパターンで名前が付けられます-

  • [your file name parameter] −これはユーザーがアップロードした実際のファイルです。この例では、「myFile」になります

  • [your file name parameter]ContentType−これはアップロードされたファイルのコンテンツタイプです。この例では、「myFileContentType」になります

  • [your file name parameter]FileName−これはアップロードされたファイルの名前です。この例では、「myFileFileName」になります

Struts Interceptorsのおかげで、3つのパラメーターを使用できます。Actionクラスに正しい名前で3つのパラメーターを作成するだけで、これらの変数が自動的に自動的に配線されます。したがって、上記の例では、3つのパラメーターと、すべてが正常に機能した場合は単に「成功」​​を返し、それ以外の場合は「エラー」を返すアクションメソッドがあります。

構成ファイル

以下は、ファイルのアップロードプロセスを制御するStruts2構成プロパティです。

シニア番号 プロパティと説明
1

struts.multipart.maxSize

ファイルのアップロードとして受け入れられるファイルの最大サイズ(バイト単位)。デフォルトは250Mです。

2

struts.multipart.parser

マルチパートフォームのアップロードに使用されるライブラリ。デフォルトではjakarta

3

struts.multipart.saveDir

一時ファイルを保存する場所。デフォルトはjavax.servlet.context.tempdirです。

これらの設定のいずれかを変更するには、次を使用できます constant アップロードするファイルの最大サイズを変更したのと同じように、アプリケーションのstruts.xmlファイルにタグを付けます。

私たちを持ってみましょう 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インターセプターは、インターセプターのデフォルトスタックの一部であるため、明示的に構成する必要はありません。ただし、<action>内に<interceptor-ref>タグを追加できます。fileUploadインターセプターは2つのパラメーターを取ります(a) maximumSize そして (b) allowedTypes

maximumSizeパラメーターは、許可される最大ファイルサイズを設定します(デフォルトは約2MBです)。allowedTypesパラメーターは、以下に示すように、受け入れられたコンテンツ(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 ファイル-

<?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>

次に、プロジェクト名を右クリックして、 Export > WAR FileWarファイルを作成します。次に、このWARをTomcatのwebappsディレクトリにデプロイします。最後に、Tomcatサーバーを起動し、URLにアクセスしてみますhttp://localhost:8080/HelloWorldStruts2/upload.jsp。これにより、次の画面が表示されます-

次に、[参照]ボタンを使用してファイル「Contacts.txt」を選択し、[アップロード]ボタンをクリックすると、サーブにファイルがアップロードされ、次のページが表示されます。アップロードしたファイルがC:\ apache-tomcat-6.0.33 \ workに保存されていることを確認できます。

FileUpload Interceptorはアップロードされたファイルを自動的に削除するため、アップロードされたファイルを削除する前に、プログラムでどこかに保存する必要があることに注意してください。

エラーメッセージ

fileUplaodインターセプターはいくつかのデフォルトのエラーメッセージキーを使用します-

シニア番号 エラーメッセージのキーと説明
1

struts.messages.error.uploading

ファイルをアップロードできなかったときに発生する一般的なエラー。

2

struts.messages.error.file.too.large

アップロードされたファイルがmaximumSizeで指定された大きすぎる場合に発生します。

3

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

アップロードされたファイルが指定された予想されるコンテンツタイプと一致しない場合に発生します。

これらのメッセージのテキストは、 WebContent/WEB-INF/classes/messages.properties リソースファイル。