栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java文件下载案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java文件下载案例

需求:
1.页面显示超链接
2.点击超链接后弹出下载对话框
3.完成图片文件下载

注意:
1.超链接指向的资源如果能够被浏览器解析,则直接在浏览器中展示,如果不能解析,则弹出下载提示框。

分析:
使用 content-disposition 响应头设置资源以附件的形式打开。

实现步骤:
1.开发前端页面,使用超链接标签,href 属性指向一个 Servlet,并且传递下载资源的名称
2.实现后端逻辑,定义一个 Servlet,获取下载资源的名称,再根据资源名称将对应的资源加载入内存中,再从内存输出到 Response对象中,再返回给客户端
2.1.获取参数
2.2.使用字节输入流读取资源文件,加载进内存中
2.3.设置响应头(content-type 和 content-disposition)
2.4.使用字节输出流写入到 Response 对象中。具体是从内存写入到 Response 的字节输出流中,再从字节输出流写入到 Response 对象中
2.5.服务器从 Response 对象中获取数据构建成响应报文发送给客户端(这步服务器自动完成)

前端页面示例代码:




    
    Title


图片
视频


服务端示例代码:

package priv.lwx.javaex.servlet_demo.web.servlet.download;



import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request, response);
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 1.获取请求参数fileName
    String fileName = request.getParameter("fileName");
    // 2.使用字节输入流加载文件进内存
    // 2.1.获取文件的服务器路径
    String realPath = this.getServletContext().getRealPath("/image/" + fileName);
    // 2.2.获取文件的文件字节输入流(用文件字节流关联文件)
    FileInputStream fis = new FileInputStream(realPath); // 这步就完成了读取文件数据进内存的操作
    System.out.println(fis);
    // 3.设置响应头
    // 3.1.设置响应头content-type
    ServletContext context = this.getServletContext();
    // 获取文件的MIME类型
    String mimeType = context.getMimeType(fileName);
    // 告诉客户端响应体的数据类型
    response.setHeader("content-type", mimeType);
    // 3.2.设置响应头content-disposition
    response.setHeader("content-disposition", "attachement;filename=" + fileName);
    // 4.将输入流的数据写入到输出流中(类似文件复制的操作)
    // 4.1.获取字节输出流
    ServletOutputStream sos = response.getOutputStream();
    // 4.2.定义读取到的字节数据的缓冲区
    byte[] buff = new byte[1024 * 8];
    int len = 0;
    while ((len = fis.read(buff)) != -1) {
      sos.write(buff, 0, len);
    }
    // 5.释放资源
    fis.close();


  }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号