Struts 2はファイルアップロード機能を実現します。


Servlet 3.0仕様のHttpServletRequestはファイルのアップロードを処理する方法を提供しましたが、このアップロードはServletで完了する必要があります。Struts 2はより簡単なパッケージを提供します。
Struts 2デフォルトではJakataのCommon-FileUploadのファイルアップロードフレームを使用していますので、Struts 2のファイルアップロード機能を使うと、jarパッケージを2つ追加する必要があります。 
Struts 2簡単ファイルのアップロード例:
1.ファイルアップロードページ
ファイルをアップロードできるようにフォームのmethodをPOSTに設定し、enctypeをmultiipad/form-dataに設定します。enctypeがmultiiPad/form-dataに設定されると、ブラウザはフォームデータをバイナリフローで処理します。

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
 Created by IntelliJ IDEA.
 User: Administrator
 Date: 2018/1/16
 Time: 14:06
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>Struts2       </title>
</head>
<body>
 <s:form action="file_upload" method="POST" enctype="multipart/form-data">
 <s:file name="upload" label="    "/>
 <s:submit value="  "/>
 </s:form>
</body>
</html>
2.アップロード要求を処理するアクション

/**
 * Description:Struts2      
 * Author: Eleven
 * Date: 2018/1/24 10:39
 */
public class FileAction extends ActionSupport{

 //    
 private File upload;
 //      
 private String uploadContentType;
 //     
 private String uploadFileName;

 //          struts.xml   param       
 private String allowTypes;

 public String page(){
 return "page";
 }

 public void upload() {

 //    :
 //1.      
 //2.           
 try{
  System.out.println("         ="+allowTypes);
  String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
  System.out.println("       ="+realPath);
  //        
  new File(realPath).mkdir();
  File file = new File(realPath+"/"+uploadFileName);
  //        
  if(!file.exists()){
  file.createNewFile();
  }
  FileOutputStream out = new FileOutputStream(file);
  FileInputStream in = new FileInputStream(upload);
  byte[] buffer = new byte[1024];
  int len = 0;
  //         1kb  1kb
  while((len = in.read(buffer))>0){
  out.write(buffer,0,len);
  }
  System.out.println("      ...");
 }catch(Exception e){
  e.printStackTrace();
 }

 }

 public File getUpload() {
 return upload;
 }

 public void setUpload(File upload) {
 this.upload = upload;
 }

 public String getUploadContentType() {
 return uploadContentType;
 }

 public void setUploadContentType(String uploadContentType) {
 this.uploadContentType = uploadContentType;
 }

 public String getUploadFileName() {
 return uploadFileName;
 }

 public void setUploadFileName(String uploadFileName) {
 this.uploadFileName = uploadFileName;
 }

 public String getAllowTypes() {
 return allowTypes;
 }

 public void setAllowTypes(String allowTypes) {
 this.allowTypes = allowTypes;
 }
}

フォームにname属性がxxxのファイル領域が含まれている場合、対応するアクションでは、このファイル領域の情報を3つのメンバー変数でカプセル化する必要がある。
タイプはFileのxxxメンバー変数で、このファイル領域に対応するファイル内容をカプセル化しました。
タイプはSteringのxxFileNameメンバー変数で、このファイル領域に対応するファイルのファイル名をカプセル化しました。
StringタイプのxxContentTypeメンバー変数は、このファイル領域に対応するファイルのファイルタイプをカプセル化しました。
3.struts.xmlの配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
 <constant name="struts.enable.DynamicMethodInvocation" value="false" />
 <constant name="struts.devMode" value="true" />

 <package name="default" namespace="/" extends="struts-default">

 <!--    -->
 <action name="file_*" class="eleven.action.FileAction" method="{1}">
  <result name="page">/WEB-INF/jsp/fileUpload.jsp</result>
  <!--    action   ,                ,  action           -->
  <param name="allowTypes">image/png,image/gif,image/jpeg</param>
 </action>

 </package>

</struts>

ブロックがファイルフィルタリングを実現します。
Struts 2はファイルアップロードのブロックを提供しています。このブロックを機能させるために、actionでスクリーンショットの参照を設定します。
fileUploadスクリーンを設定すると、二つのパラメータを指定できます。
allowTypes:アップロードが許可されているファイルタイプは、複数のファイルタイプの間に英語のカンマで区切られています。
maximSize:アップロードを許可するファイルサイズは、単位がバイトです。
ファイルのフィルタリングに失敗した場合、システムはinput論理ビューに自動的に移行しますので、このアクションのためにinputという論理ビューを構成しなければなりません。この他に、default Stockを構成するブロックを表示して参照しなければならない。
struts.xml設定ファイルは以下の通りです。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
 <constant name="struts.enable.DynamicMethodInvocation" value="false" />
 <constant name="struts.devMode" value="true" />

 <package name="default" namespace="/" extends="struts-default">

 <!--    -->
 <action name="file_*" class="eleven.action.FileAction" method="{1}">
  <!--  fileUpload        defaultStack      -->
  <interceptor-ref name="fileUpload">
  <!--         -->
  <param name="allowedTypes">image/png,image/gif,image/jpeg</param>
  <!--        -->
  <param name="maximumSize">2000</param>
  </interceptor-ref>
  <!--         -->
  <interceptor-ref name="defaultStack"/>
  <!--  input    -->
  <result name="input">/WEB-INF/jsp/input.jsp</result>

  <result name="page">/WEB-INF/jsp/fileUpload.jsp</result>
 </action>

 </package>

</struts>

上に配置されたファイルをアップロードするブロックは、ファイルアップロードを要求するタイプは画像ファイルだけであり、ファイルサイズは2000バイトを超えてはいけません。アップロードファイルが大きすぎたり、タイプが合わないとinput論理ビューにジャンプします。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。