Статьи

Struts2 Загрузка нескольких файлов

Для достижения этого необходимы некоторые изменения как на стороне клиента, так и на стороне сервера:

Загрузка нескольких файлов с помощью Struts 2, Загрузка файлов с помощью Struts 2, Загрузка с использованием Struts 2, Загрузка нескольких файлов с помощью Struts 2, несколько файлов с помощью Struts 2, файлы с помощью Struts 2, Загрузка файлов с помощью файлов Struts 2 с помощью Struts 2

  • Клиентская сторона : используйте несколько тегов <s: file>, которые позволяют пользователю выбирать столько файлов, сколько необходимо.
  • Сторона сервера : в классе действия измените тип переменных-членов из одного объекта в массив или список следующим образом:
  1.    Файл X  в  строку [] X  или  список <файл> X
  2.    String XFileName  —  String [] XFileName  или  List <String> XFileName
  3.    String XContentType  to  String [] XContentType  или  List <String> XContentType

Где X — это имя  тега <s: file>  в форме загрузки, например:

<s:file name="fileUpload" />

тогда X будет «fileUpload». Следовательно, в классе действий:

File[] fileUpload;
String[] fileUploadFileName;
String[] fileUploadContentType;

или:

List<File> fileUpload;
List<String> fileUploadFileName;
List<String> fileUploadContentType;

И не забудьте правильно создавать геттеры и сеттеры для этих переменных.

1. Пример загрузки нескольких файлов

В следующем примере программы показано, как реализовать функциональность для загрузки нескольких файлов с помощью инфраструктуры Struts 2. Приложение показывает форму загрузки, которая позволяет пользователю выбрать три файла для загрузки одновременно.

Загруженные файлы копируются в папку, которая настроена в файле struts.xml приложения  .

Давайте посмотрим, как кодируется пример приложения.

2. Напишите код для формы загрузки

Форма загрузки реализована на странице upload.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>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Multiple Files Upload with Struts2</title>
</head>
<body>
    <center>
        <h2>Pick multiple files to upload</h2>
        <s:form action="uploadFile" enctype="multipart/form-data" method="post">
            <s:file name="fileUpload" label="Pick file #1" size="30"/>
            <s:file name="fileUpload" label="Pick file #2" size="30"/>
            <s:file name="fileUpload" label="Pick file #3" size="30"/>
            <br/>
            <s:submit value="Upload All" />
        </s:form>
    </center>
</body>
</html>

При отправке этой формы вызывается действие uploadFile.

3. Напишите код для класса действий

Реализуйте класс действий Struts 2 в файле MultipleFilesUploadAction.java следующим образом:

package com.geekonjava.struts;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class MultipleFilesUploadAction {
    private File[] fileUpload;
    private String[] fileUploadFileName;
    private String[] fileUploadContentType;

    /**
     * This is the path to save uploaded file, which is configured in struts.xml
     */
    private String saveDirectory;

    public String doUpload() {

        // copy the uploaded files into pre-configured location
        for (int i = 0; i < fileUpload.length; i++) {
            File uploadedFile = fileUpload[i];
            String fileName = fileUploadFileName[i];
            File destFile = new File(saveDirectory + File.separator + fileName);
            try {
                FileUtils.copyFile(uploadedFile, destFile);
            } catch (IOException ex) {
                System.out.println("Could not copy file " + fileName);
                ex.printStackTrace();
            }
        }

        return "success";
    }

    public File[] getFileUpload() {
        return fileUpload;
    }

    public void setFileUpload(File[] fileUploads) {
        this.fileUpload = fileUploads;
    }

    public String[] getFileUploadFileName() {
        return fileUploadFileName;
    }

    public void setFileUploadFileName(String[] fileUploadFileNames) {
        this.fileUploadFileName = fileUploadFileNames;
    }

    public String[] getFileUploadContentType() {
        return fileUploadContentType;
    }

    public void setFileUploadContentType(String[] fileUploadContentTypes) {
        this.fileUploadContentType = fileUploadContentTypes;
    }

    public String getSaveDirectory() {
        return saveDirectory;
    }

    public void setSaveDirectory(String saveDir) {
        this.saveDirectory = saveDir;
    }
}

В этом классе действий POJO мы используем три массива для хранения загруженных файлов:

private File[] fileUpload;
private String[] fileUploadFileName;
private String[] fileUploadContentType;

  • Обратите внимание, что слово «fileUpload» соответствует значению атрибута name тега <s: file> в файле upload.jsp. Перехватчик Struts 2 под названием fileUpload извлекает данные для этих переменных через сеттеры.
  • Значение переменной saveDirectory задается через соответствующий установщик с помощью перехватчика staticParams в Struts 2, и это значение можно настроить в файле struts.xml.
  • Метод ввода класса действия doUpload () копирует загруженные файлы из временного каталога в местоположение, указанное в переменной saveDirectory, а затем перенаправляет в представление «success», которое является страницей результатов.

Подробнее >>>>> Geek On Java <<<<<