struts2在项目中的应用之下载

2014-11-23 22:05:18 · 作者: · 浏览: 0

文件下载是一个很常见的功能,用struts2实现文件下载的步骤:

一)定义一个Action类,FileDownload.java

  1. package com.struts2.filedownload;
  2. import java.io.InputStream;
  3. import org.apache.struts2.ServletActionContext;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. //文件下载 public class FileDownload extends ActionSupport{
  6. private int number ;
  7. private String fileName;
  8. public int getNumber() {
  9. return number; }
  10. public void setNumber(int number) {
  11. this.number = number; }
  12. public String getFileName() {
  13. return fileName; }
  14. public void setFileName(String fileName) {
  15. this.fileName = fileName; }
  16. //返回一个输入流,作为一个客户端来说是一个输入流,但对于服务器端是一个 输出流
  17. public InputStream getDownloadFile() throws Exception {
  18. if(1 == number) {
  19. this.fileName = Dream.jpg ; //获取资源路径
  20. return ServletActionContext.getServletContext().getResourceAsStream(upload/Dream.jpg) ; }
  21. else if(2 == number)
  22. { this.fileName = jd2chm源码生成chm格式文档.rar ;
  23. //解解乱码 this.fileName = new String(this.fileName.getBytes(GBK),ISO-8859-1);
  24. return ServletActionContext.getServletContext().getResourceAsStream(upload/jd2chm源码生成chm格式文档.rar) ; }
  25. else return null ;
  26. }
  27. @Override public String execute() throws Exception {
  28. return SUCCESS;
  29. }
  30. }
    package com.struts2.filedownload;
    
    import java.io.InputStream;
    
    
    import org.apache.struts2.ServletActionContext;
    
    
    import com.opensymphony.xwork2.ActionSupport;
    
    //文件下载
    public class FileDownload extends ActionSupport{
    	
    	private int number ;
    
    	private String fileName;
    
    	public int getNumber() {
    		return number;
    	}
    
    	public void setNumber(int number) {
    		this.number = number;
    	}
    	
    	public String getFileName() {
    		return fileName;
    	}
    
    	public void setFileName(String fileName) {
    		this.fileName = fileName;
    	}
    
    	//返回一个输入流,作为一个客户端来说是一个输入流,但对于服务器端是一个 输出流
    	public InputStream getDownloadFile() throws Exception
    	{
    		if(1 == number)
    		{
    		   this.fileName = Dream.jpg ;
    		   //获取资源路径
    		   return ServletActionContext.getServletContext().getResourceAsStream(upload/Dream.jpg) ;
    		}
    		
    		else if(2 == number)
    		{
    			this.fileName = jd2chm源码生成chm格式文档.rar ;
    			//解解乱码
    			this.fileName = new String(this.fileName.getBytes(GBK),ISO-8859-1);
    			return ServletActionContext.getServletContext().getResourceAsStream(upload/jd2chm源码生成chm格式文档.rar) ;
    		}
    		else
    		   return null ;
    	}
    	
    	@Override
    	public String execute() throws Exception {
    		
    		return SUCCESS;
    	}
    
    }
    

    二)在struts.xml文件中配置相关信息

    1. text/plainattachment;fileName=${fileName}
    2. downloadFile1024
    3. 
                  
         
              
               
               
                text/plain
                attachment;fileName=${fileName}
                downloadFile
                1024 
                
               
             
         
      
            

      1.结果类型必须要写成 type=stream ,与之对应的处理类是 org.apache.struts2.dispatcher.StreamResult

      2.涉及到的参数:

      data-cke-saved-src=https://www.cppentry.com/upload_files/article/76/1_ptyb9__.jpg

      3.

      1)attachment;fileName=${fileName}

      contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择

      2) attachment :下载时会打开下载框

      3) fileName=${fileName} :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字

      4.downloadFile,这个downloadFile名字要和FileDownload.java类中的getDownloadFile()方法名去掉get 一致

      三)用于显示下载的链接界面 filedownload.jsp

      1. <%@ page language=java import=java.util.* pageEncoding=UTF-8%> <%
      2. String path = request.getContextPath(); String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
      3. %>
      4. 文件下载内容:


        Dream.jpg:点击下载
      5. jd2chm源码生成chm格式文档.rar:点击下载2