Пример загрузки файла в Struts

Пример загрузки файла в Struts

В этом руководстве вы узнаете, как загрузить файл в файловую систему сервера с тегом Struts<html:file>.

Загрузите этот пример загрузки файла Struts -Struts-FileUpload-Example.zip

1. Форма действия

В форме действия создайте переменнуюorg.apache.struts.upload.FormFile для хранения загруженного файла, а также проверку формы для загруженного файла.

package com.example.common.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.upload.FormFile;

public class FileUploadForm extends ActionForm{

    private FormFile file;

    public FormFile getFile() {
        return file;
    }

    public void setFile(FormFile file) {
        this.file = file;
    }

    @Override
    public ActionErrors validate(ActionMapping mapping,
       HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();

        if( getFile().getFileSize()== 0){
           errors.add("common.file.err",
            new ActionMessage("error.common.file.required"));
           return errors;
        }

        //only allow textfile to upload
        if(!"text/plain".equals(getFile().getContentType())){
            errors.add("common.file.err.ext",
             new ActionMessage("error.common.file.textfile.only"));
            return errors;
        }

            //file size cant larger than 10kb
        System.out.println(getFile().getFileSize());
        if(getFile().getFileSize() > 10240){ //10kb
           errors.add("common.file.err.size",
            new ActionMessage("error.common.file.size.limit", 10240));
           return errors;
        }

        return errors;
    }
}

2. действие

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

package com.example.common.action;

import java.io.File;
import java.io.FileOutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

import com.example.common.form.FileUploadForm;

public class FileUploadAction extends Action{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

        FileUploadForm fileUploadForm = (FileUploadForm)form;

        FormFile file = fileUploadForm.getFile();

        //Get the servers upload directory real path name
        String filePath =
               getServlet().getServletContext().getRealPath("/") +"upload";

        //create the upload folder if not exists
        File folder = new File(filePath);
        if(!folder.exists()){
            folder.mkdir();
        }

        String fileName = file.getFileName();

        if(!("").equals(fileName)){

            System.out.println("Server path:" +filePath);
            File newFile = new File(filePath, fileName);

            if(!newFile.exists()){
              FileOutputStream fos = new FileOutputStream(newFile);
              fos.write(file.getFileData());
              fos.flush();
              fos.close();
            }

            request.setAttribute("uploadedFilePath",newFile.getAbsoluteFile());
            request.setAttribute("uploadedFileName",newFile.getName());
        }
        return mapping.findForward("success");
    }
}

3. JSP

Вы должны установить тип кодирования тега<html:form> на «multipart/form-data» и указать метод HTTP как «post».

fileupload.jsp


 +
: +
 +

display.jsp

    File uploaded to :



    ">
        Click here to download it

4. struts-config.xml

Связать все вместе






    
        

    

    

        

        
            
        

    

    

Попробуй это

http://localhost:8080/StrutsExample/UploadPage.do
Выберите файл и нажмите кнопку отправки.

Struts-file-upload-example1

http://localhost:8080/StrutsExample/Upload.do
Будет перенаправлен на display.jsp и отобразится информация о загруженном файле.

Struts-file-upload-example2