关于layui、struts2上传文件以及出现 No result defined for action xxxAction and result input异常的问题

本文介绍如何使用Struts2结合layui实现TXT文件的上传功能,并解决上传大文件时出现的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对几个大小不一的txt进行文件上传

使用的是struts2,没有用表单,用了layui提供的文件上传

具体官方文档

http://www.layui.com/doc/modules/upload.html

这里就不做多说明了。

页面代码如下:(还需导入一些layui的js、css文件,这里没有贴出来)

<div class="layui-upload" style="margin-left: 10%;margin-top: 5%">
    <button type="button" class="layui-btn layui-btn-normal" id="upload">选择文件</button>
    <button type="button" class="layui-btn" id="begin" style="margin-left: 3%">开始上传</button>
    <button type="button" class="layui-btn layui-btn-warm" id="" style="margin-left: 3%">上传说明</button>
</div>

<script>
    layui.use('upload', function(){
        var $ = layui.jquery, upload = layui.upload;
        //选完文件后不自动上传
        upload.render({
            elem: '#upload'
            ,url: 'studentAction_uploadTxt'
            ,accept: 'file' //普通文件
            ,exts: 'txt' //只允许上传txt文件
            ,auto: false
            ,field:'file'
            //,multiple: true
            ,bindAction: '#begin'
            ,before:function () {
                layer.load();
            }
            ,done: function(res){
                layer.closeAll('loading');
                    alert("上传成功!");

            }
            ,error:function () {
                layer.closeAll('loading');
                alert("上传错误,请重试!");
            }
        });
    });
</script>

标红的代码相当表单的name=“file”的作用,这样后台就能根据file取到这个文件了

Action代码:

//文件上传
File file;
String fileFileName;
String fileContentType;

public String getFileFileName() {
    return fileFileName;
}

public void setFileFileName(String fileFileName) {
    this.fileFileName = fileFileName;
}

public String getFileContentType() {
    return fileContentType;
}

public void setFileContentType(String fileContentType) {
    this.fileContentType = fileContentType;
}

public File getFile() {
    return file;
}

public void setFile(File file) {
    this.file = file;
}
//文件上传
    public String uploadTxt(){
        String filePath=ServletActionContext.getServletContext().getRealPath("/txt");
        File fileFolder=new File(filePath);
        System.out.println(fileFileName+"  "+fileContentType+"  "+file.toString());
        System.out.println(fileFolder);
        if(!fileFolder.exists()){
            fileFolder.mkdirs();
        }
        try {
            FileUtils.copyFile(file,new File(fileFolder,fileFileName));
            String path=fileFolder+"\\"+fileFileName;
            System.out.println(path);
            studentService.SaveStudent(path);
            info=new HashMap();
        }catch (Exception e){

        }
        info.put("code",0);
        return "uploadTxt";
}

标红的代码为主要代码,其余的可以忽略不看

String filePath=ServletActionContext.getServletContext().getRealPath("/txt");
getRealPath方法刚开始调用不出来,导入了一个 servlet-api.jar包解决了这个问题

进行文件上传的时候,有几个文件可以正常的上传,有几个点击上传后报出了

No result defined for action xxxAction and result input异常

找了好长时间的解决办法,也尝试了很多种方法都不能解决问题,

最后看一个大神说了一句可能是struts支持文件的大小默认有点小(2M),改大点就可以了,

正好也发现了能成功上传的那几个文件大小都小于2M,不能上传的文件都大于2M,

于是在Struts.xml中加入了下行代码:

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

将默认大小设置大一点,问题成功解决。

在这里做个记录,希望没人再为这种小问题耽误太长时间了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值