package com.rlovep.file; import java.io.File; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownAction extends ActionSupport{ // 1. 获取要下载的文件的文件名 private String fileName; public void setFileName(String fileName){ //处理传入的参数中的编码问题 try { fileName=new String(fileName.getBytes("ISO8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } this.fileName=fileName; } /***1.显示所有要下载的列表****/ public String list() throws Exception{ //得到upload目录路径 String path = ServletActionContext.getServletContext().getRealPath("/upload"); // 目录对象 File file = new File(path); // 得到所有要下载的文件的文件名 String[] fileNames = file.list(); // 保存 Map<String, Object> request = ActionContext.getContext().getContextMap(); request.put("fileNames", fileNames); return "list"; } /*************2. 文件下载*********************/ //2. 下载提交的业务方法 (在struts.xml中配置返回stream) public String down() throws Exception { return "download"; } //返回文件流的方法 public InputStream getAttrInputStream(){ return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName); } //下载显示的文件名 public String getDownFileName(){ // 需要进行中文编码 try { fileName = URLEncoder.encode(fileName, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } return fileName; } }