Struts2文件上传和下载
2016-09-12 15:14
399 查看
Struts2文件上传和下载
文件上传
文件上传需要用到<s:file>标签,该标签是一个表单标签,要放在
<s:form>标签中。
<s:form>的
enctype属性要指定为
multipart/form-data,
method一般指定为
post。
如下,上传页面:
<s:form action="fileUpload.action" enctype="multipart/form-data" method="post"> <s:file name="uploadFile" label="选择文件"></s:file> <s:submit></s:submit> </s:form>
文件上传Action类
一般需要包含3个类型的属性:File类型的属性,指定上传文件的内容,假设该属性为XXX
String类型的属性,该属性名称必须为XXXFileName,其中XXX为File类型的属性名称,指定上传文件名
String类型的属性,改属性名称必须为XXXContentType,指定上传文件的文件类型。
如下的
FileUploadAction
package action; import java.io.File; import com.opensymphony.xwork2.ActionSupport; public class FileUploadAction extends ActionSupport{ private static final long serialVersionUID = 1L; //上传文件 private File uploadFile; //上传文件的文件名 private String uploadFileFileName; //上传文件的类型 private String uploadFileContentType; public File getUploadFile() { return uploadFile; } public void setUploadFile(File uploadFile) { this.uploadFile = uploadFile; } public String getUploadFileFileName() { return uploadFileFileName; } public void setUploadFileFileName(String uploadFileFileName) { this.uploadFileFileName = uploadFileFileName; } public String getUploadFileContentType() { return uploadFileContentType; } public void setUploadFileContentType(String uploadFileContentType) { this.uploadFileContentType = uploadFileContentType; } @Override public String execute() throws Exception { if (uploadFile != null) { //上传文件存放的目录 String dataDir = "/Users/Miller/Pictures/upload"; //上传文件具体在服务器的位置 File savedFile = new File(dataDir, uploadFileFileName); //将上传文件从临时文件复制到指定文件 uploadFile.renameTo(savedFile); }else{ return INPUT; } return SUCCESS; } }
文件上传Action的配置
在文件上传的Action中可以添加一个<param>标签,该标签配置了文件上传后所在的路径,其
name属性和
Action类中的路径属性相对应。
还可以在
struts.xml中配置Action的拦截器,该拦截器在
struts-default中配置过,但使用时可以重新配置,其名称为
fileUpload。一般会指定两个参数:
allowedTypesSet和
maximumSize。
allowedTypesSet参数指定运行上传的文件类型,多个文件类型之间用逗号隔开;
maximumSize参数指定允许上传的文件大小,单位是字节。
如下的
struts.xml配置:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="defautl" namespace="/" extends="struts-default"> <!-- 定义文件上传Action --> <action name="fileUpload" class="action.FileUploadAction"> <result>/success.jsp</result> <result name="input">/index.jsp</result> <interceptor-ref name="defaultStack"> <!-- 设置文件大小 --> <param name="fileUpload.maximumSize">100000000</param> <!-- 设置文件类型 --> <param name="fileUpload.allowedTypesSet">image/jpg,image/jpeg,image/png</param> </interceptor-ref> </action> </package> </struts>
文件下载
请参考Struts2下载文件实例Action
在Action类中,声明一个 InputStream 的数据类型和getter方法。DownloadAction.java
package com.gitbook.netmon.action; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport{ private InputStream fileInputStream; public InputStream getFileInputStream() { return fileInputStream; } public String execute() throws Exception { fileInputStream = new FileInputStream(new File("C:\\file-for-download.txt")); return SUCCESS; } }
视图文件
一个正常的页面,有一个下载链接,用于下载文件。downloadPage.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <body> <h1>Struts 2 download file example</h1> <s:url id="fileDownload" namespace="/" action="download" ></s:url> <div><div class="ads-in-post hide_if_width_less_800"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 728x90 - After2ndH4 --> <ins class="adsbygoogle hide_if_width_less_800" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-2836379775501347" data-ad-slot="3642936086" data-ad-region="yiibairegion"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div></div><h2>Download file - <s:a href="%{fileDownload}">fileABC.txt</s:a> </h2> </body> </html>
struts.xml
定义下载文件的细节。<param name=”inputName”>值是从Action的InputStream属性的名称。
阅读Struts2的数据流结果文档以了解更详细信息。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="show"> <result name="success">pages/downloadPage.jsp</result> </action> <action name="download" class="com.gitbook.netmon.action.DownloadAction"> <result name="success" type="stream"> <param name="contentType">application/octet-stream</param> <param name="inputName">fileInputStream</param> <param name="contentDisposition">attachment;filename="file-for-download.txt"</param> <param name="bufferSize">1024</param> </result> </action> </package> </struts>
参考
Struts 2中实现文件下载(修正中文问题)相关文章推荐
- struts2学习笔记(11)——struts2文件上传与下载
- struts2文件上传下载
- struts2 文件上传和下载,以及部分源码解析
- Struts2 多文件上传下载
- Struts2之实现文件上传与下载
- Struts2学习笔记16:Struts2的文件上传和下载【续】三
- Struts2文件的上传和下载
- Struts2文件的上传和下载
- Struts2文件上传和下载
- Struts2文件的上传和下载
- Struts2文件的上传和下载
- struts2文件的上传和下载功能
- Struts2 多个文件上传和下载(支持中文文件名)
- 【原创】Struts2学习笔记之文件的上传与下载
- Struts2学习笔记13:Struts2的文件上传和下载
- Struts2文件上传与下载
- Struts2学习笔记14:Struts2的文件上传和下载【续】
- [转载] 第六章 struts2文件上传与下载
- Struts2文件上传与下载
- struts2 文件上传与下载原理