文件上传:
第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从http://commons.apache.org/下载。
第二步:把form表的enctype设置为:“multipart/form-data“,如下:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadFile">
</form>
第三步:在Action类中添加以下属性,属性红色部分对应于表单中文件字段的名称:
public class HelloWorldAction{
private File uploadFile;//得到上传的文件
private String uploadFileContentType;//得到文件的类型
private String uploadFileFileName;//得到文件的名称
//这里略省了属性的getter/setter方法
public String upload() throws Exception{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
File file = new File(realpath);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadFile, new File(file, uploadFileFileName));
return "success";
}
}
多文件上传:
第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从http://commons.apache.org/下载。
第二步:把form表的enctype设置为:“multipart/form-data“,如下:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadFile">
</form>
第三步:在Action类中添加以下属性,属性红色部分对应于表单中文件字段的名称:
public class HelloWorldAction{
private File[] uploadFiles;//得到上传的文件
private String[] uploadFilesContentType;//得到文件的类型
private String[] uploadFilesFileName;//得到文件的名称
//这里略省了属性的getter/setter方法
public String upload() throws Exception{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
File file = new File(realpath);
if(!file.exists()) file.mkdirs();
for(int i=0;i< uploadFiles.length;i++){
FileUtils.copyFile(uploadFiles[i], new File(file, uploadFilesFileName[i]));
}
return "success";
}
}
利用Stream结果视图实现文件下载:
实现步骤:
1.编写Action中的getInputStream()方法,将目标文件转化成输入流
public class DownloadAction extends ActionSupport{
private String fileName;
public InputStream getInputStream(){
InputStream inputStream=null;
try {
inputStream = new FileInputStream(new File(fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return inputStream;
}
//fileName的getter和setter方法
public String execute() throws Exception {
return this.SUCCESS;
}
}
文件下载(配置struts.xml):
配置Struts.xml文件
<action name="download" class="com.xasxt.struts.action.DownloadAction">
<result type="stream">
<param name="contentType">application/actet-stream</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment; filename="test.txt"</param>
<param name="bufferSize">4096</param>
</result>
</action>
对于Stream result来说,有以下四个参数
contentType:指定下载文件类型,其中application/octet-stream表示无限制
inputName:流对象名,例如inputstream,框架会自动去寻找action中的getInputStream方法.
contentDisposition:经过转码的文件名,默认格式为attachment;filename=“${fileName}”,调用该Action中的getFileName方法.
bufferSize:下载文件缓存大小