zoukankan      html  css  js  c++  java
  • struts 文件下载

    文件下载步骤:

    (1)获取要下载的文件的文件名称.对其进行编码处理,由于文件上传默认是get提交

    (2)文件下载提交的业务方法

    (3)返回文件流的方法

    (4)下载显示的文件名称

    文件下载列表:

    <body>
        <table border="1">
        <tr>
      			<td>编号</td>
      			<td>文件名称</td>
      			<td>操作</td>
      		</tr>
        	<c:forEach items="${fileNames}" var="fileName" varStatus="v">
    	    	<tr>
    	    		<td>${v.count}</td>
    	    		<td>${fileName}</td>
    	    		<td>
    	    			<c:url var="url" value="down_down">
    	    				<c:param name="fileName" value="${fileName }"></c:param>
    	    			</c:url>
    	    			<a href="${url}">下载</a>
    	    		</td>
    	    	</tr>
        	</c:forEach>
        </table>


    文件下载使用到的action类

    package cn.itcast.download;
    
    import java.io.File;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    public class DownloadAction extends ActionSupport{
    	public String list(){
    		//得到目标中的文件
    		String path = ServletActionContext.getServletContext().getRealPath("/upload");
    		File file=new File(path);
    		String[] fileNames = file.list();
    		HttpServletRequest request = ServletActionContext.getRequest();
    		request.setAttribute("fileNames", fileNames);
    		return "list";
    	}
    	//文件下载的步骤
    	//1.获取要下载的文件的文件名称
    	private String fileName;
    	public void setFileName(String fileName) {
    		//处理传入的參数中文问题(默认是get提交)
    		try {
    			fileName=new String(fileName.getBytes("ISO8859-1"),"UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			throw new RuntimeException(e);
    		}
    		this.fileName = fileName;
    	}
    	//2.下载提交的业务方法
    	public String down(){
    		return "download";
    	}
    	//3.返回文件流的方法
    	public InputStream getAttrInputStream(){
    		return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName);
    	}
    	//4.下载显示的文件名称
    	public String getDownFileName(){
    		try {
    			fileName=URLEncoder.encode(fileName,"utf-8");
    		} catch (UnsupportedEncodingException e) {
    			throw new RuntimeException(e);
    		}
    		return fileName;
    	}
    }<strong>
    </strong>
    struts配置文件:要和action类中的方法名相应

    <struts>
    	<package name="down" namespace="/" extends="struts-default">
    		<action name="down_*" class="cn.itcast.download.DownloadAction" method="{1}">
    			<result name="list">/{1}.jsp</result>
    			<result name="download" type="stream">
    			
    				<!-- 执行下载的文件的类型:指定为全部的二进制文件类型 -->
    			   <param name="contentType">application/octet-stream</param>
    			   
    			   <!-- 相应的是Action中属性: 返回流的属性【事实上就是getAttrInputStream()】 -->
    			   <param name="inputName">attrInputStream</param>
    			   
    			   <!-- 下载头,包含:浏览器显示的文件名称 -->
    			   <param name="contentDisposition">attachment;filename=${downFileName}</param>
    			 
    			 	<!-- 缓冲区大小设置 -->
    			   <param name="bufferSize">1024</param>
    			</result>
    		</action>
    		
    	</package>
    </struts>



  • 相关阅读:
    Ubuntu 使用OpenCV 利用Makefile运行
    YOLOV3——PyTorch训练TensorFlowLite部署模型转换
    PyTorch——学习笔记
    opencv调用摄像头分辨率问题
    Dlib与Opencv中图像格式转换(matrix-Mat)
    Windows下 VS2015 + Dlib + CUDA环境搭建
    OpenCV——银行卡识别
    QT入门
    LeetCode——最长连续回文串
    数值分析--第四章--特征值特征向量计算(乘幂法)
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7145329.html
Copyright © 2011-2022 走看看