21xrx.com
2024-11-08 21:17:49 Friday
登录
文章检索 我的文章 写文章
实例教程:Java如何将文件写入Response
2023-06-15 19:47:08 深夜i     --     --
Java Response 文件写入

在开发Web应用程序中,我们常常需要将生成的文件以流的形式输出到客户端。Java语言中提供了一种方便的方法,即将文件写入Response中,让客户端直接下载。本文将为大家介绍如何使用Java将文件写入Response,并附上代码案例。

下面是实现文件写入Response的核心代码:


// 设置response的Header

response.reset();

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));

response.setHeader("Content-Length", String.valueOf(fileLength));

// 读取要下载的文件,保存到文件输入流

InputStream in = new FileInputStream(file);

// 复制文件内容到response输出流中

OutputStream out = response.getOutputStream();

byte[] buf = new byte[4096];

int len = -1;

while ((len = in.read(buf)) != -1) {

  out.write(buf, 0, len);

}

in.close();

out.close();

其中,response为HttpServletResponse对象,fileName为下载文件的文件名,fileLength为文件长度,file为文件对象,需要将其读取到输入流中。

使用上述代码实现将文件写入Response即可实现下载功能。下面附上完整的Java代码案例:


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  // 获取要下载的文件名

  String fileName = request.getParameter("filename");

  // 获取要下载的文件对象

  File file = new File(this.getServletContext().getRealPath("/download/" + fileName));

  // 获取要下载的文件长度

  long fileLength = file.length();

  // 设置response的Header

  response.reset();

  response.setContentType("application/octet-stream");

  response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));

  response.setHeader("Content-Length", String.valueOf(fileLength));

  // 读取要下载的文件,保存到文件输入流

  InputStream in = new FileInputStream(file);

  // 复制文件内容到response输出流中

  OutputStream out = response.getOutputStream();

  byte[] buf = new byte[4096];

  int len = -1;

  while ((len = in.read(buf)) != -1) {

    out.write(buf, 0, len);

  }

  in.close();

  out.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  this.doPost(request, response);

}

通过上述代码实现了将文件(以下载文件为例)输出到Response中的功能。通过这种方式,可以方便地实现将文件以流的形式输出到客户端,提供下载服务。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复