6.struts1.x的上传与下载
- 文件上传
<!-- form的配置,很简单,但是很必要,好像只能用动态表单。另外不定数量的文件上传并不太好解决 -->
<form-bean name="photoForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="photo1"
type="org.apache.struts.upload.FormFile">
</form-property>
<form-property name="photo2"
type="org.apache.struts.upload.FormFile">
</form-property>
<form-property name="photo3"
type="org.apache.struts.upload.FormFile">
</form-property>
</form-bean>
------------------------------------------------------------------
<!-- 跟普通的action的配置没有任何区别 -->
<action path="/upload" type="edu.yzu.action.UploadAction"
name="photoForm">
<forward name="success" path="/ok.jsp"></forward>
</action>
------------------------------------------------------------------------------
<form action="<%=request.getContextPath() %>/upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="photo1">
<input type="file" name="photo2">
<input type="file" name="photo3">
<input type="submit">
</form>
------------------------------------------------------------------
package edu.yzu.action;
import java.io.FileOutputStream;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
import org.apache.struts.upload.MultipartRequestHandler;
public class UploadAction extends Action {
@SuppressWarnings("unchecked")
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm daf=(DynaActionForm)form;
MultipartRequestHandler handler=daf.getMultipartRequestHandler();
Hashtable photos=handler.getFileElements();
Set set=photos.keySet();
System.out.println(set.size());
Iterator values=set.iterator();
while(values.hasNext())
{
FormFile file=(FormFile) photos.get(values.next());
System.out.println(file.getFileName());
FileOutputStream out=new FileOutputStream("c:\\"+file.getFileName());
out.write(file.getFileData());
out.close();
}
return mapping.findForward("success");
}
}
- 文件下载
文件下载功能是通过DownloadAction实现的。
继承DownloadAction。
实现getStreamInfo方法,返回StreamInfo对象。
部分代码的实现:
package edu.yzu.action;
import java.io.File;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.actions.DownloadAction;
public class TestDownLoad extends DownloadAction{
@Override
/*
* 这个类可以没有execute方法。因为通过链接下载文件成功成没有必要跳转,当然也可以
* 做到,这时文件下载将会被抑制,就没有下载的意义了。
* 它的配置与其它的action没有任何区别
*/
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
String fileName = "test.txt";
response.setHeader("Content-disposition",
"attachment; filename=" + fileName);
File file = new File(this.servlet.getServletContext().getRealPath("/upload")+"//"+fileName);
return new FileStreamInfo("text/html", file);
}
}