三、 文件上传和下载
文件上传的步骤(利用fileUpload的拦截器完成的)
1.1.1 编写上传页面
<body>
<form action="" method="post" enctype="multipart/form-data">
文件:<input type="file" name="myfile"/><br>
<input type="submit" value="上传">
</form>
</body>
1.1.2 编写处理上传的业务逻辑action
如果要获取上传文件的名称: 上传文件的属性名+FileName
如果要获取上传文件的文件类型: 上传文件的属性名+ContentType
package cn.zzsxt.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
private File myfile;//接受上传的文件
private String myfileFileName;//上传文件的属性+FileName获取上传文件的名称,并绑定到该属性上
private String myfileContentType;//上传文件的属性+ContentType获取上传文件的类型,并绑定到该属性上
public File getMyfile() {
return myfile;
}
public void setMyfile(File myfile) {
this.myfile = myfile;
}
public String getMyfileFileName() {
return myfileFileName;
}
public void setMyfileFileName(String myfileFileName) {
this.myfileFileName = myfileFileName;
}
public String getMyfileContentType() {
return myfileContentType;
}
public void setMyfileContentType(String myfileContentType) {
this.myfileContentType = myfileContentType;
}
@Override
public String execute() throws Exception {
System.out.println(myfileFileName+"---"+myfileContentType);
File uploadDir = new File("D:/upload");
//如果上传文件的保存目录不存在,则创建该目录
if(!uploadDir.exists())
uploadDir.mkdirs();//创建目录
//上传
FileUtils.copyFile(myfile, new File(uploadDir,myfileFileName));
return this.SUCCESS;
}
}
1.1.3 配置struts.xml
<struts>
<!--struts.multipart.maxSize定义允许上传的最大字节数,默认为2M -->
<constant name="struts.multipart.maxSize" value="209715200"></constant>
<package name="upload" extends="struts-default">
<action name="upload" class="cn.zzsxt.action.UploadAction">
<!-- 如果result的name属性缺省,则默认值为success -->
<result>/success.jsp</result>
</action>
</package>
</struts>
2.1 文件下载:利用stream结果视图完成文件的下载
实现步骤
编写下载页面
<body>
<a href="download.action?fileName=myblog.sql">下载--->myblog.sql</a>
<a href="download.action?fileName=aopalliance.jar">下载--->aopalliance.jar</a>
</body>
编写处理下载的业务逻辑Action
package cn.zzsxt.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
/**
* 利用stream结果视图完成下载
* @author Think
*
*/
public class DownloadAction extends ActionSupport {
private String fileName;//获取要下载的文件名称
private InputStream inputStream;//输入流(将要下载的问题转换为输入流,结合stream结果视图完成下载操作)
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public String execute() throws Exception {
File file = new File("D:/upload",fileName);//将要下载的文件转为File对象
inputStream = new FileInputStream(file);//转换为输入流
return this.SUCCESS;
}
}
配置struts.xml
<action name="download" class="cn.zzsxt.action.DownloadAction">
<result name="success" type="stream">
<!--回调action中getInputStream()方法获取文件流的数据,命名应该为流的属性名称 -->
<param name="inputName">inputStream</param>
<!-- 设置文件下载的类型 application/octet-stream对下载类型不做限制 -->
<param name="contentType">application/octet-stream</param>
<!-- attachment;以附件的方式保存, filename="下载文件保存的名称" ${属性名}可以获取action中属性的值 -->
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>