struts2文件上传下载
2016-11-03 21:59
411 查看
文件上传
文件上传的前提:a.表单method必须是post;
b.enctype取值必须是multipart/form-data;
c.提供文件选择域。
引入struts2的标签
<%@ taglib uri="/struts-tags" prefix="s" %> <body> <%--文件上传的必要前提: 1.请求方式必须是post 2.enctype属性的取值必须是multipart/form-data 3.提供一个文件选择域 --%> <s:actionerror/> <s:form action="upload.action" enctype="multipart/form-data"> <s:textfield name="username" label="用户名" /> <s:file name="photo" label="照片" /> <s:submit value="上传"/> </s:form> </body>
动作类:
//表单上提供的字段 private String username; private File photo; //struts2在文件上传时提供的属性 private String photoFileName;//上传的文件名。上传字段名称+FileName 注意大小写 private String photoContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写 public String upload(){ //1.拿到ServletContext ServletContext application = ServletActionContext.getServletContext(); //2.调用realPath方法,获取根据一个虚拟目录得到的真实目录 String filePath = application.getRealPath("/WEB-INF/files"); //3.如果这个真实的目录不存在,需要创建 File file = new File(filePath); if(!file.exists()){ file.mkdirs(); } //4.把photo存过去 //拷贝:把photo的临时文件复制到指定的位置。注意:临时文件还在 //FileUtils.copyFile(photo, new File(file,photoFileName)); //剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了 photo.renameTo(new File(file,photoFileName)); return null; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public File getPhoto() { return photo; } public void setPhoto(File photo) { this.photo = photo; } public String getPhotoFileName() { return photoFileName; } public void setPhotoFileName(String photoFileName) { this.photoFileName = photoFileName; } public String getPhotoContentType() { return photoContentType; } public void setPhotoContentType(String photoContentType) { this.photoContentType = photoContentType; }
文件上传的配置:
一,文件上传大小限制(默认是2MB)如果上传文件超过了默认大小,upload拦截器会转向一个input的逻辑视图。所有需要配置input视图:
<result name="input">/upload1.jsp</result>
修改文件上传大小的限制:
方法1:
<!-- 限制上传文件的大小,第一种方式:通过修改struts2的常量。 在default.properties中配的struts.multipart.maxSize=2097152--> <constant name="struts.multipart.maxSize" value="5242880"></constant>
方式2:使用的拦截器是fileUploadInterceptor,所以可以向其中注入文件限制大小的方式:
<param name="fileUpload.maximumSize">31457280</param>
二:限制文件上传的类型
1、通过限制上传文件的扩展名:给fileUpload拦截器注入参数
<param name="fileUpload.allowedExtensions">jpg,png,bmp</param>
2、通过限制上传文件的MIME类型
<param name="fileUpload.allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png, image/pjpeg</param>
注意:这里所有的上传的大小,以及类型如果超出了限制则会跳转到input视图,所有会出现如下的提示:
我们需要在出错后的错误信息中文提示(Struts2中的所有文本提示都是基于国际化的)默认信息提示在:struts2-core.jar\org.apache.struts2\struts-message.properties
解决办法:使用国际化消息资源包把对应的key取值改变一下
创建一个资源文件:fileuploadmessage.properties,放到src下面
然后配置如下:
<constant name="struts.custom.i18n.resources" value="com.itheima.web.action.fileupload_message"></constant>
多文件上传原理一样:
<body> <%--文件上传的必要前提: 1.请求方式必须是post 2.enctype属性的取值必须是multipart/form-data 3.提供一个文件选择域 --%> <s:actionerror/> <s:form action="upload1.action" enctype="multipart/form-data"> <s:textfield name="username" label="用户名" /> <s:file name="photo" label="照片" /> <s:file name="photo" label="照片" /> <s:submit value="上传"/> </s:form> </body>
动作类:
public class UploadAction1 extends ActionSupport { //表单上提供的字段 private String username; private File[] photo; //struts2在文件上传时提供的属性 private String[] photoFileName;//上传的文件名。上传字段名称+FileName 注意大小写 private String[] photoContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写 public String upload(){ //1.拿到ServletContext ServletContext application = ServletActionContext.getServletContext(); //2.调用realPath方法,获取根据一个虚拟目录得到的真实目录 String filePath = application.getRealPath("/WEB-INF/files"); //3.如果这个真实的目录不存在,需要创建 File file = new File(filePath); if(!file.exists()){ file.mkdirs(); } //4.把photo存过去 //剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了 for(int i=0;i<photo.length;i++){ photo[i].renameTo(new File(file,photoFileName[i])); } return null; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public File[] getPhoto() { return photo; } public void setPhoto(File[] photo) { this.photo = photo; } public String[] getPhotoFileName() { return photoFileName; } public void setPhotoFileName(String[] photoFileName) { this.photoFileName = photoFileName; } public String[] getPhotoContentType() { return photoContentType; } public void setPhotoContentType(String[] photoContentType) { this.photoContentType = photoContentType; } }
配置文件:和单文件一样
文件下载:
动作类:public class DownloadAction extends ActionSupport { private InputStream inputStream; private String filename; public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String download() throws Exception{ String filePath = ServletActionContext.getServletContext().getRealPath("WEB-INF/files/5.jpg"); inputStream = new FileInputStream(filePath); filename = "你好.jpg"; return SUCCESS; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } }
配置文件:
注意这里使用了ognl,而且使用了静态方法调用。所有需要声明:
<!-- 开启静态方法调用 --> <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<action name="download" class="com.zeroyoung.web.action.DownloadAction" method="download"> <result name="success" type="stream"> <param name="contentType">application/octet-stream/</param> <param name="contentDisposition">attachment;filename=${@java.net.URLEncoder@encode(filename,"UTF-8")}</param> <param name="inputName">inputStream</param> </result> </action>
相关文章推荐
- struts2文件上传与下载
- 7、struts2命名空间、各种配置元素详解及文件上传下载
- 文件上传与下载(一)struts2
- Struts2学习笔记之文件的上传与下载
- Struts2-14 文件的上传与下载
- struts2 的文件上传与下载
- struts2实现文件的上传下载
- struts2文件上传下载
- Struts2之文件上传与下载
- struts2实现文件上传与下载
- Struts2文件上传与下载
- struts2文件上传下载(含中文编码问题)
- 使用Struts2实现文件的上传和下载
- struts2文件上传下载
- JAVAWEB开发之Struts2详解(三)——Struts2信息国际化、自定义拦截器以及Struts2文件上传和下载详解
- java中struts2实现文件上传下载功能实例解析
- Struts2文件上传下载
- struts2实现文件上传(多文件上传)及下载
- Struts2 文件上传和文件下载
- struts2的文件上传和下载