strtus2文件上传

struts2中自带了文件上传的拦截器,用起来非常的简单和方便。下面详细说明struts2实现文件上传的步骤。
前言: 实现该方法,必须用到两个依赖:
这里写图片描述
这个两个依赖如果是使用maven那么再导入struts2依赖时自动导包,如果没有使用maven则要自己手动导包。
1 文件上传要采用form表单提交的方式,在前端页面中要使用表单

<form action="/fileAction" method="post" enctype="multipart/form-data">
    <label for="fileInfo">个人档案</label><input id="fileInfo" name="fileInfo" type="file">
    <input type="submit" value="提交">
</form>

注意 表单提交的方式为post请求, 并且enctype必须有并且值为”multipart/form-data”

2 前端提交的地址要在struts2的配置文件中配置,文件大小默认是不超出2M如果文件有大小设置则加入参数

<!--开启常量-->
 <constant name="struts.multipart.maxSize" value="1000000000"/>

如果没有大小限制,则不需要该设置

3 struts.xml配置内容

    <!--大小设置-->
<constant name="struts.multipart.maxSize" value="1000000000"></constant>
<package name="file" namespace="/" extends="struts-default">
    <!-- 指定(限制)上传文件的类型,定义局部拦截器,修改默认拦截器的属性 
                "fileUpload.maximumSize" :限制上传最大的文件大小。 
                "fileUpload.allowedTypes":允许上传文件的类型。 
                "fileUpload.allowedExtensions":允许上传文件的可扩展文件类型。 -->
<interceptor-ref name="defaultStack">
    <param name="fileUpload.maximumSize">500000000</param>
    <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param>
    <param name="fileUpload.allowedExtensions">.txt,.ppt,.doc</param>
 </interceptor-ref>
<action name="fileAction" class="fileAction" method="upload">
     <result name="success">/hello.jsp</result>
 </action>

</package>

4 Action类中的代码

public class FileUploadAction extends ActionSupport {
    private File fileInfo; //上传文件表单中 file的name保持一致
    private String fileInfoContentType;//前缀和表单中的file的name保持一致,后面的名字固定为ContentType
    private String fileInfoFileName;//前缀和表单中的file的name保持一致,后面的名字固定为FileName
    //然后为属性添加get-set方法
    public String upload() {

        System.out.println("*********文件*******" + fileInfo);
        System.out.println("*********文件类型*******" + fileInfoContentType);
        System.out.println("*********文件名*******" + fileInfoFileName);
        //得到上传文件在服务器的路径加文件名
        String target = ServletActionContext.getServletContext().getRealPath("/upload");
        System.out.println("文件存储位置" + target);
        //获得文件的扩展名
        int i = fileInfoFileName.lastIndexOf(".");
        String extenssion = "";
        if (i != -1){
            extenssion = fileInfoFileName.substring(i+1);
        }
        //获得文件的新的名字,以时间戳为名字,避免文件名重复
        String newFileName = new Date().getTime() + "." + extenssion;
        System.out.println("文件的名字"+newFileName);
        File newFile = new File(target, newFileName);
        //判断文件是否存在,如果文件已经不存在就新建一个文件
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdir();
        }
        try {
            //将接收到的文件复制到新建的文件中
            FileUtils.copyFile(fileInfo, newFile);

        } catch (IOException e) {
            e.printStackTrace();
        }


        return SUCCESS;
    }

猜你喜欢

转载自blog.csdn.net/caoPengFlying/article/details/81385012