SSH框架开发过程中遇到的BUG总结——Struts2文件上传的问题

  • Struts上传文件总是遇到 NullPointException
    upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
    <title>课程管理</title>
</head>
<body>

<h3>上传该课程学生名单文件</h3>
<s:form action="addStudentForCourseByFileAction" method="post" enctype="multipart/form-data">
    <s:file name="studentExcel" label="选择上传的文件" />
    <s:submit value="上传" />
</s:form>

</body>
</html>

Action.java

public class UploadFileAction extends ActionSupport {
    File upload;//上传的文件
    String uploadContentType;//上传的文件类型
    String uploadFileName; //上传的文件名

    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

    public String getUploadFileName() {
        return uploadFileName;
    }
    
    public void setUploadFileName(String uploadFileName)
    {
        this.uploadFileName = uploadFileName;
    }

    public String execute()
    {
        System.out.println("FileName:"+this.getUploadFileName());
        System.out.println("ContentType:"+this.getUploadContentType());
        System.out.println("File:"+this.getUpload());

        //获取要保存文件夹的物理路径(绝对路径)
        String realPath= ServletActionContext.getServletContext().getRealPath("/upload");
        File file = new File(realPath);

        //测试此抽象路径名表示的文件或目录是否存在。若不存在,创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
        if(!file.exists())
            file.mkdirs();

        try {
            //保存文件
            FileUtils.copyFile(upload, new File(file,uploadFileName));
        } catch (IOException e) {
            e.printStackTrace();
            return "error";
        }
        return "success";
    }
}

struts.xml (即使编译器告诉你error.jsp是红色的也没事,只要和upload.jsp在一个目录之下)

<package name="Struts2" extends="struts-default" namespace="/">

        <action name="uploads" class="com.bupt.se.homework.action.UploadFileAction">

            <!-- 指定(限制)上传文件的类型,定义局部拦截器,修改默认拦截器的属性
                "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-excel,application/octet-stream</param>-->
                <param name="fileUpload.allowedExtensions">.txt,.xlsx,.csv,.xls,</param>
            </interceptor-ref>

            <result name="success">admin.jsp</result>
            <!-- 出现错误自动会返回input结果,进入结果视图 -->
            <result name="input" >error.jsp</result>
        </action>
    </package>

注意名称的问题!!!如果文件名叫 upload,那个获得它的类型就用 uploadContentType,获得它的文件名就用 uploadFileName。如果不这样用就无法读到它的文件名和类型,然后用它的时候就会遇到NullPointerException

  • 上传的Excel文件类型一直是application/octet-stream,导致总是返回input
    这个问题其实并没有解决,我只是绕开了。
    其实就是把struts.xml中的allowedTypes那一行注释掉,或者加入application/octet-stream。只要最后保存文件的时候使用excel就没事。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值