Загрузка Файла Struts2


Я хочу загрузить несколько файлов в одной форме, и это количество файлов варьируется от пользователя к другому, например. пользователь может загрузить 2 файла, а другой пользователь может загрузить 12 файлов. Я хочу знать, как я могу создать цикл или что-то в форме JSP struts2 таким образом, что когда пользователь загружает файл, он добавляет его имя в список, и он/она может загрузить другой файл и быть добавлен в список и так далее.

2 2

2 ответа:

Вы можете использовать build in Struts2 для загрузки нескольких файлов feature.In ваш файл Jsp вы должны определить что-то вроде

<s:form action="doMultipleUploadUsingList" method="POST" enctype="multipart/form-data">
    <s:file label="File (1)" name="upload" />
    <s:file label="File (2)" name="upload" />
    <s:file label="FIle (3)" name="upload" />
    <s:submit />
</s:form>

Который будет отправлять эти файлы в ваш класс действий, и у вас есть возможность собирать содержимое файла в виде списка

public class MultipleFileUploadUsingListAction extends ActionSupport {

    private List<File> uploads = new ArrayList<File>();
    private List<String> uploadFileNames = new ArrayList<String>();
    private List<String> uploadContentTypes = new ArrayList<String>();
    // There getter and setter methods

}

Здесь

[File Name] : File - the actual File
[File Name]ContentType : String - the content type of the file
[File Name]FileName : String - the actual name of the file uploaded (not the HTML name)

Для получения подробной информации обратитесь к странице загрузки нескольких файлов Struts2

Загрузка Нескольких Файлов

Показать пользователю возможность добавить еще один файл на странице JSP-это вопрос того, как вы хотите покажите это.Все, что вам нужно сделать, когда вы показываете ему файл-имя коробки загрузки должно быть таким же, чтобы Struts2 param interceptor мог установить их в качестве списка в вашем классе действий

Я реализовал это с помощью двух плагинов struts2, которые являются, Struts2 jQuery Plugin и Struts2 Scope Plugin

Ответ таков:

Включите эти зависимости в ваш maven POM файл:

        <dependency>
            <groupId>com.jgeppert.struts2.jquery</groupId>
            <artifactId>struts2-jquery</artifactId>
            <version>3.2.0</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>com.googlecode.struts2scopeplugin</groupId>
            <artifactId>struts2-scope-plugin</artifactId>
            <version>1.0.4</version>
        </dependency>

И мы создаем класс для подготовки формы следующим образом:

 public class PrepareUpload extends ActionSupport{
     @In (scope=ScopeType.CONVERSATION)
      @Out (scope=ScopeType.CONVERSATION)
      private List<File> fileUploadi = new ArrayList<File>();

      @In (scope=ScopeType.CONVERSATION)
      @Out (scope=ScopeType.CONVERSATION)
        private List<String> fileUploadContentTypei = new ArrayList<String>();

      @In (scope=ScopeType.CONVERSATION)
      @Out (scope=ScopeType.CONVERSATION)
        private List<String> fileUploadFileNamei = new ArrayList<String>();

    @Action(value = "/prepareupload", results = {
            @Result(location = "upload.jsp", name = "success")
          })
          @End
    public String execute() throws Exception

      {
        return SUCCESS;

      }

    public List<File> getFileUploadi() {
        return fileUploadi;
    }

    public void setFileUploadi(List<File> fileUploadi) {
        this.fileUploadi = fileUploadi;
    }

    public List<String> getFileUploadContentTypei() {
        return fileUploadContentTypei;
    }

    public void setFileUploadContentTypei(List<String> fileUploadContentTypei) {
        this.fileUploadContentTypei = fileUploadContentTypei;
    }

    public List<String> getFileUploadFileNamei() {
        return fileUploadFileNamei;
    }

    public void setFileUploadFileNamei(List<String> fileUploadFileNamei) {
        this.fileUploadFileNamei = fileUploadFileNamei;
    }

}

И класс для добавления в список и обработки вызова ajax следующим образом:

public class UploadAction extends ActionSupport {

  private static final long serialVersionUID = 7968544374444173511L;
  private static final Log  log              = LogFactory.getLog(UploadAction.class);


  private String            echo;
  @In (scope=ScopeType.CONVERSATION)
  @Out (scope=ScopeType.CONVERSATION)
  private List<File> fileUploadi = new ArrayList<File>();
  private List<File> fileUpload = new ArrayList<File>();
  @In (scope=ScopeType.CONVERSATION)
  @Out (scope=ScopeType.CONVERSATION)
    private List<String> fileUploadContentTypei = new ArrayList<String>();
  private List<String> fileUploadContentType = new ArrayList<String>();
  @In (scope=ScopeType.CONVERSATION)
  @Out (scope=ScopeType.CONVERSATION)
    private List<String> fileUploadFileNamei = new ArrayList<String>();
  private List<String> fileUploadFileName = new ArrayList<String>();
  @Action(value = "/uploada", results = {
    @Result(location = "simpleecho.jsp", name = "success")
  })
  @Begin
  public String execute() throws Exception
  {

fileUploadi.addAll( fileUpload);
fileUploadFileNamei.addAll(fileUploadFileName);
fileUploadContentTypei.addAll(fileUploadContentType);
   for (int i = 0;  i < fileUploadFileNamei.size();  i++)
   {
       if (echo == null)
           echo =   fileUploadFileNamei.get(i);
       else
      echo +=  "<br>" + fileUploadFileNamei.get(i);
    log.info(echo);
   }
    return SUCCESS;
  }

  public String getEcho()
  {
    return echo;
  }


  public List<File> getFileUpload() {
        return fileUpload;
    }

    public void setFileUpload(List<File> fileUpload) {
        this.fileUpload = fileUpload;
    }

    public List<String> getFileUploadContentType() {
        return fileUploadContentType;
    }

    public void setFileUploadContentType(List<String> fileUploadContentType) {
        this.fileUploadContentType = fileUploadContentType;
    }

    public List<String> getFileUploadFileName() {
        return fileUploadFileName;
    }

    public void setFileUploadFileName(List<String> fileUploadFileName) {
        this.fileUploadFileName = fileUploadFileName;
    }

    public List<File> getFileUploadi() {
        return fileUploadi;
    }

    public void setFileUploadi(List<File> fileUploadi) {
        this.fileUploadi = fileUploadi;
    }

    public List<String> getFileUploadContentTypei() {
        return fileUploadContentTypei;
    }

    public void setFileUploadContentTypei(List<String> fileUploadContentTypei) {
        this.fileUploadContentTypei = fileUploadContentTypei;
    }

    public List<String> getFileUploadFileNamei() {
        return fileUploadFileNamei;
    }

    public void setFileUploadFileNamei(List<String> fileUploadFileNamei) {
        this.fileUploadFileNamei = fileUploadFileNamei;
    }




    }

И, наконец, jsp должен быть чем-то вроде:

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

<html>
<head>
<sj:head jqueryui="true" defaultLoadingText="Please wait ..."/>
<s:head />
</head>

<body>
<h1>File Upload:</h1>

<s:form action="uploada" 
method="POST" enctype="multipart/form-data" theme="xhtml" >

<s:file label="File:" name="fileUpload" size="40" />

 <div id="result" >Add Files Below:</div>
<sj:submit 
            targets="result" 
            button="true" 
            validate="true" 
            value="Add File" 
            indicator="indicator"
            parentTheme="xhtml"
            />
<sj:submit 
            button="true" 
            validate="true" 
            value="Submit" 
            indicator="indicator"
            parentTheme="xhtml"
            />

</s:form>

</body>
</html>