zoukankan      html  css  js  c++  java
  • struts2框架实现文件下载

    1. 创建action

    import java.io.InputStream;
    import org.apache.struts2.ServletActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileDownloadAction extends ActionSupport {
    
    
    	private String inputPath;
    
    	public void setInputPath(String value) {
    		inputPath = value;
    	}
    
    	//下载用的Action应该返回一个InputStream实例, 该方法对应在result里的inputName属性值为targetFile
    	public InputStream getTargetFile() throws Exception {
    		return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    	}
    
    	public String execute() throws Exception {
    		return SUCCESS;
    	}
    
    }
    
    

    2. 配置struts.xml

    <package name="ud" namespace="/ud" extends="default">
    		<action name="download" class="top.onelala.up2down_load.FileDownloadAction">
    			<param name="inputPath">images中.gif</param>
    			<result name="success" type="stream">
    				<param name="contentType">image/gif</param>
    				<param name="inputName">targetFile</param>
    				<param name="contentDisposition">attachment;filename="struts.gif"</param>
    				<param name="bufferSize">4096</param>
    			</result>
    		</action>
     </package>
    

    3. 前台页面显示,download.jsp

    <li>下载Struts2的Logo:<a href="ud/download.action">下载图形文件</a></li>
    

    **注意:**attachment;filename=“struts.gif”,设置浏览器以下载的方式打开文件,文件下载的时候保存的名字应为struts.gif,如果直接写filename=“struts.gif”,那么默认情况是代表inline,浏览器会尝试自动打开它,此等价于这样的写法: inline; filename="struts2.txt"

    测试

    附录:

    要下载文件,首先要获取文件列表

    创建action

    public class DownloadAction extends ActionSupport{
    	private File[] files;
    	public String list(){
    		//取得文件保存路径
    		String path=ServletActionContext.getServletContext().getRealPath("/upload");
    		File f=new File(path);
    		//获取目录下保存的文件
    		files=f.listFiles();
    		return "list";
    	}
    //省略get/set
    }
    

    配置struts.xml

    <action name="*down" class="base.MyFileUpload" method="{1}">
    	<result name="list">/filelist.jsp</result>
    </action>
    

    前台页面显示,filelist.jsp

    <body>
        <c:forEach items="${files }" var="f">
        	${f.name}<a href="listdownload.action?filename=${f.name }">下载</a><br>
        </c:forEach>
    </body>
    

    点击下载链接,将文件名传入后台,
    修改action代码

    public class DownloadAction extends ActionSupport{
    	private File[] files;
    	private String fileName;
    	public String list(){
    		//取得文件保存路径
    		String path=ServletActionContext.getServletContext().getRealPath("/upload");
    		File f=new File(path);
    		//获取目录下保存的文件
    		files=f.listFiles();
    		return "list";
    	}
    	public InputStream  getDownloadFile() throws Exception{
    		String filePath = ServletActionContext.getRequest()
    				.getServletContext().getRealPath("/upload/"+fileName);
    		InputStream is = new FileInputStream(new File(filePath));
    		//解决下载文件名称问题
    		fileName=URLEncoder.encode(fileName, "UTF-8");
    		return is;
    	}
    	public void setFileName(String fileName) throws UnsupportedEncodingException {
    		//处理get请求中文乱码
    		this.fileName = new String(fileName.getBytes("iso8859-1"),"utf-8");
    	}
    	public File[] getFiles() {
    		return files;
    	}
    	public void setFiles(File[] files) {
    		this.files = files;
    	}
    	public String getFileName() {
    		return fileName;
    	}	
    }
    

    修改struts.xml文件

    <action name="*down" class="base.DownloadAction" method="{1}">
    				<result name="list">/filelist.jsp</result>
    				<result type="stream">
    					<!-- 下载的文件数据存放的方法,该方法返回一个InputStream 
    						例如取值为inputStream的属性需要编写getInputStream()方法-->
    					<param name="inputName">downloadFile</param>
    					<!--下载时,客户端显示的下载的文件名 -->
    					<param name="contentDisposition"> attachment; filename=${fileName}</param>
    					<!-- 数据的缓冲大小 -->
    					<param name="bufferSize">1024</param>
    				</result>
    </action>
    
    
  • 相关阅读:
    如何在VS 2010中使用 VS2013的解决方案(转)
    A2W、W2A、A2T、T2A的使用方法
    海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
    特征提取代码总结
    请不要做浮躁的人
    linux下操作问题与总结
    项目问题与解决方案
    电脑故障与解决方案
    给年轻工程师的十大忠告
    记忆的马太效应
  • 原文地址:https://www.cnblogs.com/onefine/p/10499392.html
Copyright © 2011-2022 走看看