1、
Struts2.0 文件上传与下载全解析
struts的上传封装的已经非常完美了,首先我们来看一下页面
上传档案 :
2、
3、"button" onclick="return nextsubmit();"/>
4、umentFile; public String getDocumentFileContentType() ...{ return documentFileContentType; } public void setDocumentFileContentType(String documentFileContentType) ...{ this.documentFileContentType = documentFileContentType; } public String getD
5、ocumentFileFileName() ...{ return documentFileFileName; } public void setDocumentFileFileName(String documentFileFileName) ...{ this.documentFileFileName = documentFileFileName; } public File getDocumentFile() ...{ return documentFile; }
6、 public void setDocumentFile(File documentFile) ...{ this.documentFile = documentFile; } private void copy(File src, File dst) ...{ InputStream in = null; OutputStream out = null; try...{ in = new BufferedInputStream(
7、new FileInputStream(src)); out = new BufferedOutputStream( new FileOutputStream(dst)); byte [] buffer = new byte [1024]; while (in.read(buffer) > 0 ) out.write(buffer); in.close(); out.clos
8、e(); }catch (Exception e) ...{ e.printStackTrace(); } } public String save()...{ if(!documentFileFileName.equals("")) ...{ String folder = ServletActionContext.getServletCont
9、ext() .getRealPath("/archives"); File rootDir = new File(folder); if(!rootDir.exists()) rootDir.mkdirs(); String fileEx = documentFileFileName.substring(
10、 documentFileFileName.indexOf("."), documentFileFileName.length()); String fileRealName = documentFileFileName.substring(0, documentFileFileName.indexOf(".")) + String.valueOf(new Date().getTime())+fileEx;
11、 String fileName = folder + "\" + fileRealName; copy(documentFile,new File(fileName)); } return "success"; } documentFileContentType; documentFileFileName; documentFile; 上传后这三个东西会
12、自动注入进来,根据要求对文件名更改下,保存下
好了,接着我们要提供下载,看看struts是怎么做的,网上关于这方面资料很少,就一个家伙把官方的showcase翻译下,我再完整的走一遍流程
在页面中
13、ream; import java.io.UnsupportedEncodingException; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; public class FileDownloadAction implements Action ...{ private String inputPath; pu
14、blic void setInputPath(String value) throws UnsupportedEncodingException ...{ inputPath = new String(value.getBytes("ISO-8859-1"),"UTF-8"); System.out.println(); } public InputStream getInputStream() throws Exception ...{ return ServletActionContext.getServlet
15、Context().getResourceAsStream(inputPath); } public String execute() throws Exception ...{ String fileName = inputPath.substring(inputPath.lastIndexOf("/")+1, inputPath.length()); ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment; filename="
16、new String(fileName.getBytes("gb2312"),"iso-8859-1"));
return SUCCESS;
}
}
相应的XML配置
17、>
4096
18、
这一步也是非常重要的。
注意:第一个转换,"ISO-8859-1"————"UTF-8" UTF-8是根据你自己的编码来处理
第二个转换,"gb2312"————"iso-8859-1" 你就不要改变了,不管你是什么编码,都这么处理就是了,只要你的客户用的是中文的操作系统,呵呵
大家在官方例子showcase里看到的是这样的
19、am name="inputPath">/images/struts.gif
20、aram>
4096






