[[toc]]

第七节 文件下载

1、初始形态

使用链接地址指向要下载的文件。此时浏览器会尽可能解析对应的文件,只要是能够在浏览器窗口展示的,就都会直接显示,而不是提示下载。
下载

下载

下载

上面例子中,只有 chapter04.zip 文件是直接提示下载的,其他两个都是直接显示。

2、明确要求浏览器提示下载

@Autowired
private ServletContext servletContext;

@RequestMapping(“/download/file”)
public ResponseEntity downloadFile() {

  1. // 1.获取要下载的文件的输入流对象<br /> // 这里指定的路径以 Web 应用根目录为基准<br /> InputStream inputStream = servletContext.getResourceAsStream("/images/mi.jpg");
  2. try {<br /> // 2.将要下载的文件读取到字节数组中<br /> // ①获取目标文件的长度<br /> int len = inputStream.available();
  3. // ②根据目标文件长度创建字节数组<br /> byte[] buffer = new byte[len];
  4. // ③将目标文件读取到字节数组中<br /> inputStream.read(buffer);
  5. // 3.封装响应消息头<br /> // ①创建MultiValueMap接口类型的对象,实现类是HttpHeaders<br /> MultiValueMap responseHeaderMap = new HttpHeaders();
  6. // ②存入下载文件所需要的响应消息头<br /> responseHeaderMap.add("Content-Disposition", "attachment; filename=mi.jpg");
  7. // ③创建ResponseEntity对象<br /> ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(buffer, responseHeaderMap, HttpStatus.OK);
  8. // 4.返回responseEntity对象<br /> return responseEntity;<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> } finally {
  9. if (inputStream != null) {<br /> try {<br /> inputStream.close();<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }
  10. }
  11. return null;<br />}

3、典型应用场景举例

我们目前实现的是一个较为简单的下载,可以用在下面的一些场合:

  • 零星小文件下载
  • 将系统内部的数据导出为 Excel、PDF 等格式,然后以下载的方式返回给用户

上一节 回目录 下一节