Struts2自学笔记——Struts2的文件上传
编程技术  /  houtizong 发布于 3年前   88
<form action="uploadfile" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username" id="username"/><br/> 文 名:<input type="file" id="filename" name="upload"/><br/> <input type="submit" value="提交"/> <div>${message}</div> </form><br/> <form action="uploadfile2" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username" id="username"/><br/> 文 名:<input type="file" id="filename" name="upload"/><br/> <input type="submit" value="提交"/> <div>${message}</div> </form>
private File upload; //上传的文件,与页面的<input type="file" name="upload"/>中的name属性一致private String uploadFileName;//文件名,Struts规定个格式 [name]FileNameprivate String uploadContentType;//文件类型,Struts规定的格式[name]ContentTypeprivate String username;//private String parentDir;@SuppressWarnings("deprecation")public String execute() {try {InputStream is = new FileInputStream(upload);//创建输入流,读取上传文件//String parentDir = ServletActionContext.getServletContext().getRealPath(parentDir);String parentDir = ServletActionContext.getRequest().getRealPath("/upload");//指定文件上传目录File destFile = new File(parentDir, this.getUploadFileName());if (!destFile.getParentFile().exists()) {//判断存放文件的目录是否存在destFile.getParentFile().mkdir();//不存在则创建}OutputStream os = new FileOutputStream(destFile);//创建输出流,将内容写入文件byte[] buffer = new byte[1024];int length = 0;while ((length = is.read(buffer)) > 0) {// 读文件os.write(buffer, 0, length);// 写文件}is.close();//关闭inputStreamos.close();//关闭outputStream} catch (Exception e) {e.printStackTrace();}return "success";}public File getUpload() {return upload;}public void setUpload(File upload) {this.upload = upload;}public String getUploadFileName() {return uploadFileName;}public void setUploadFileName(String uploadFileName) {this.uploadFileName = uploadFileName;}public String getUploadContentType() {return uploadContentType;}public void setUploadContentType(String uploadContentType) {this.uploadContentType = uploadContentType;}public void setUsername(String username) {this.username = username;}public String getUsername() {return username;}上传文件的路径也可以在Struts.xml文件中Action的param属性进行指定,然后通过
ServletActionContext.getServletContext().getRealPath(paramName)获取到相应的参数值即可;
/** ...与之前的方法一致的部分(各个字段的setters和getters)*/public String execute(){String parentDir = ServletActionContext.getRequest().getRealPath("/upload");File destFile = new File(parentDir,this.getUploadFileName());if(!destFile.getParentFile().exists()){destFile.getParentFile().mkdir();}try {FileUtils.copyFile(upload, destFile);//将文件从临时文件目录复制到目标目录} catch (IOException e) {e.printStackTrace();}return "success";}配置文件Struts.xml
<!-- 配置文件上传临时目录 --><!-- <constant name="struts.multipart.saveDir " value="e:/tmpupload" /> --><package name="uploadfile" extends="struts-default"><action name="uploadfile" class="changluo.file.UploadFileAction"><!-- 配置上传路径 --><!-- <param name="parentDir">/upload</param> --><result name="success">/uploadResult.jsp</result><result name="input">/index.jsp</result><!-- 配置拦截器,可以惊醒一些特殊的需求 --><!-- <interceptor-ref name="fileupload"><param name="maximumsize">409600</param><param name="allowedTypes">application/vnd.ms-powerpoint</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref> --></action><action name="uploadfile2" class="changluo.file.UploadFileAction2"><result name="success">/uploadResult.jsp</result><result name="input">/index.jsp</result></action></package>如果需要满足特殊的上传需求,可以配置拦截器,在拦截器里配置允许的上传文件类型以及上传文件的大小
<param name="maximumsize">409600</param><param name="allowedTypes">application/vnd.ms-powerpoint</param>翻看Struts2的org.apache.struts2.interceptor.FileUploadInterceptor类的源代码就可以看到这俩属性的定义:
Protected long maximumSize;Protected String allowedTypes***具体的文件上传类型可以参考tomcat目录下的conf\web.xml文件中的一系列文件类型。
#uses java.servlet.context.tempdir by defaultstruts.multipart.saveDir=如果Struts2上传文件的临时目录在Struts.xml中没有设置设置
<constant name="struts.multipart.saveDir " value="e:/tmpupload" />则可以在控制台看到如下提示信息:
信息: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir另外,还可以通过设置struts.i18n.encoding的属性进行修改编码设置!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接