文件下载步骤:
(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>
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2025-01-07 00:35:29