对几个大小不一的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>
将默认大小设置大一点,问题成功解决。
在这里做个记录,希望没人再为这种小问题耽误太长时间了。