Struts2之上传文件

一、单文件上传

 1.定义form表单

<form action="uploadFile" method="post" enctype="multipart/form-data">
    上传文件:<input type="file" name="myFile">
    <input type="submit" value="提交">
</form>

  重点:

    (1)form表单上添加属性enctype="multipart/form-data"

    (2)文件选择的input标签type设置为file

 2.定义文件上传Action(根据需求自定义)

package com.yg.study.action;

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

import org.apache.commons.io.FileUtils;

public class FileUploadAction {
    private File myFile;
    private String myFileFileName;

    public File getMyFile() {
        return myFile;
    }


    public void setMyFile(File myFile) {
        this.myFile = myFile;
    }


    public String getMyFileFileName() {
        return myFileFileName;
    }


    public void setMyFileFileName(String myFileFileName) {
        this.myFileFileName = myFileFileName;
    }


    public String upload(){
        String path = this.getClass().getResource("/").getPath();
        //System.out.println(path);
        File file=new File(path, "upload");
        if(!file.exists()){
            file.mkdir();
        }
        try {
            FileUtils.copyFile(myFile, new File(file, myFileFileName));
        } catch (IOException e) {
            
            e.printStackTrace();
        }
        return "success";
    }
}

  重点:

    (1)定义类型为File,变量名称为form表单中文件选择input标签的name属性的值的变量,这里为myFile,用于接收form表单提交的文件

    (2)定义类型为String,变量名为orm表单中文件选择input标签的name属性的值+"FileName"的变量,这里为myFileFileName,用于接收form表单提交的文件名称

    (3)为上述两个变量提供get和set方法,尤其是set方法不可少,否则变量的值设置不上

 3.配置struts.xml请求映射(根据需求自定义)

<action name="uploadFile" class="com.yg.study.action.FileUploadAction" method="upload">
    <result name="success">/success.jsp</result>
</action>

 4.启动项目

  启动项目,访问文件上传页面,选择文件,提交即可

       

 5.设置最大文件大小

    struts默认文件上传最大为2M,上传大于2M的文件会报异常

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (53647459) exceeds the configured maximum (2097152)
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:968)
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)
    at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parseRequest(JakartaMultiPartRequest.java:192)
    at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.processUpload(JakartaMultiPartRequest.java:131)
    at org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest.parse(JakartaMultiPartRequest.java:92)
    at org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper.<init>(MultiPartRequestWrapper.java:84)
    at org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:849)
    at org.apache.struts2.dispatcher.ng.PrepareOperations.wrapRequest(PrepareOperations.java:138)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

  解决办法:

    在struts.xml文件中添加如下配置:

<constant name="struts.multipart.maxSize" value="104857600"></constant>

    我这里将最大文件大小设置为了100M(根据项目需求自定义即可)

二、多文件上传

  未完待续......

  

猜你喜欢

转载自www.cnblogs.com/antusheng/p/11804442.html
今日推荐