struts2实现的文件上传下载案例(二)、FileUpLoad文件的下载

简介: struts2实现的文件上传下载案例(二)、FileUpLoad文件的下载

开发思路:

1,要先数据库上查询到服务器上有的文件,遍历到list集合中在前端页面显示,给一个超链接提供下载,

2,建立和文件关联的输入流

3,建立和客户关联的输出流

4,一边读,一遍写

5,关闭输入输出流


开发步骤:

项目的整个目录结构还和文件上传的结构一致,


1,前端页面代码如下:

<h2>服务器文件、点击下载</h2>
    <hr>
      <s:iterator value="list" >
      <a href="${pageContext.request.contextPath }/file/download?id=<s:property value="file_id" />"><s:property value="file_name" /></a></br>
    </s:iterator>

2,后台Action代码为:

public String Download() {
    System.out.println("-----"+id);
    FileService service = new FileServiceImpl();
    Fileupload f = service.SelOneFile(id);
    // 1 在指定的目录下获取文件的绝对路径
    HttpServletRequest request = ServletActionContext.getRequest();
    ServletContext servletContext = request.getServletContext();
    System.out.println(f.getFile_path());
    String realPath = servletContext.getRealPath(f.getFile_path()+ f.getFile_name());
    // 2 建立和文件关联的输入流
    InputStream in = null;
    OutputStream out = null;
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    try {
      in = new FileInputStream(realPath);
      bis = new BufferedInputStream(in);
      // 3 获取和client关联的输出流
      HttpServletResponse response = ServletActionContext.getResponse();
      // 告知浏览器文件的类型和使用方式
      response.setContentType("text/plain");
      response.setHeader("Content-Disposition", "attachment;filename="
          + URLEncoder.encode(f.getFile_name(), "utf-8"));
      out = response.getOutputStream();
      bos = new BufferedOutputStream(out);
    } catch (FileNotFoundException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    // 4 一边读 一边写
    while (true) {
      int value;
      try {
        value = bis.read();
        if (value == -1) {
          break;
        }
        bos.write(value);
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    // 5 关闭流
    try {
      bis.close();
      bos.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    // 注意:文件下载无需跳转
    return null;
  }

文件的下载需要先通过select * from t_file从数据库中查询到已经上传到服务器上的文件路径和文件名等。

然后点击下载的时候将所选文件的id传到后台,指定所要下载的单个文件,

然后通过文件输入输出流将文件复制到用户所在的电脑就完成了下载操作,


完整的项目源码地址为:

https://download.csdn.net/download/macwx/11260564


目录
相关文章
|
6月前
|
Java
Struts文件上传与下载详解_文件的下载
Struts文件上传与下载详解_文件的下载
|
Java
struts2实现的文件上传下载案例(一)、FileUpLoad
struts2实现的文件上传下载案例(一)、FileUpLoad
249 0
struts2实现的文件上传下载案例(一)、FileUpLoad
|
Java 开发者
Struts2的文件下载 | 学习笔记
快速学习 Struts2的文件下载,介绍了 Struts2的文件下载系统机制, 以及在实际应用过程中如何使用。
|
缓存 Java Apache
Struts2实现单文件上传,多文件上传与下载(十)上
Struts2实现单文件上传,多文件上传与下载(十)
253 0
Struts2实现单文件上传,多文件上传与下载(十)上
|
Web App开发 Java 数据库
|
Java 缓存
09 Struts2 实现文件上传下载
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710554 文件上传对Struts2来说是一件非常容易的事情。
1139 0