当前位置: 首页 > 编程笔记 >

分享Spring的下载组件

堵凯
2023-03-14
本文向大家介绍分享Spring的下载组件,包括了分享Spring的下载组件的使用技巧和注意事项,需要的朋友参考一下

本文为大家分享了Spring4的下载组件,供大家参考,具体内容如下

package com.hnust.common.controller;
 
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
 
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
 
/**
 * Created by Heweipo on 2016/5/27.
 * <p>
 * 下载通用控制器
 */
@RestController
public class DownloadController extends BaseController {
 
  /**
   * 下载文件通用方法
   *
   * @param file 文件对象
   * @return 文件字节流
   */
  public ResponseEntity<byte[]> export(File file) {
    return export(file.getName(), file);
  }
 
 
  /**
   * 下载文件通用方法
   *
   * @param fileName 文件名称
   * @param file   文件对象
   * @return 文件字节流
   */
  public ResponseEntity<byte[]> export(String fileName, File file) {
 
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
 
    headers.setContentDispositionFormData("attachment", encodeFileName(fileName));
    ResponseEntity<byte[]> rs = null;
    try {
      // 这里不能使用 HttpStatus.CREATED 201 是因为 IE Edge 无法识别,但是Firefox chrome 没问题
      rs = new ResponseEntity<>(FileUtils.readFileToByteArray(file),
          headers, HttpStatus.OK);
    } catch (IOException e) {
      //throw new CommonException(ResponseStatusEnum.FILE_ERROR, e);
    }
    return rs;
  }
 
  /**
   * 下载文件的名称,这个是在浏览器那里显示的名称
   *
   * @param fileName 文件名称
   * @return 加码的文件名称
   * <p>
   * IE
   * Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
   * <p>
   * Edge
   * Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586
   * <p>
   * Firefox
   * Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
   * <p>
   * Chrome
   * Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
   */
  private String encodeFileName(String fileName) {
    String name = fileName;
    try {
      String agent = request.getHeader("USER-AGENT").toLowerCase();
      if (null != agent && (agent.contains("msie") || agent.contains("edge"))) { // IE edge
        name = URLEncoder.encode(fileName, "UTF-8");
      } else if (agent.contains("safari") || agent.contains("chrome") || agent.contains("firefox")) { // safari chrome firefox
        name = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
      } else { // IE10 IE11
        name = URLEncoder.encode(fileName, "UTF-8");
      }
      // 把加号还原为空格(IE Edge 有问题)
      name = name.replace("+", "%20");
    } catch (UnsupportedEncodingException e) {
      //throw new CommonException(ResponseStatusEnum.FAILURE, e);
    }
    return name;
  }
 
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍java webservice上传下载文件代码分享,包括了java webservice上传下载文件代码分享的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java webservice上传下载文件代码,供大家参考,具体内容如下 1、新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress 2、发布测试webservice(ec

  • 本文向大家介绍兼容ie6浏览器的php下载文件代码分享,包括了兼容ie6浏览器的php下载文件代码分享的使用技巧和注意事项,需要的朋友参考一下 PS:这段代码在win系统下跑没有问题,枫哥亲测可用.如果用的是linux或是其他系统,要要诸位自行测试下啦. 这个代码是枫哥从国外的一个站点上找到的,亲测可用.度娘出来的结果,你懂的.因此在博客上共享出来,希望对大家有用.国外的站,地址忘了,没有办法放出

  • 本文向大家介绍Java Web端程序实现文件下载的方法分享,包括了Java Web端程序实现文件下载的方法分享的使用技巧和注意事项,需要的朋友参考一下 Web文件下载有两种,一种是文件在网站目录下,在浏览器中直接输入文件路径即可下载,如http://www.xxx.com/file.zip。另外一种是文件不在网站目录下或者文件是动态生成的(导出报表或者导出excel等),这种情况需要通过respo

  • 本文向大家介绍Python实现的下载8000首儿歌的代码分享,包括了Python实现的下载8000首儿歌的代码分享的使用技巧和注意事项,需要的朋友参考一下 下载8000首儿歌的python的代码: 有需要的可以参考继续修改。

  • 本文向大家介绍Angular实现下载安装包的功能代码分享,包括了Angular实现下载安装包的功能代码分享的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: PS:下面在给大家分享一段代码关于angularJS实现锚点跳转实例 总结 以上所述是小编给大家介绍的Angular实现下载安装包的功能代码分享,希望对大家有所帮助,如果大家有任何疑问请给我留言,小

  • 本文向大家介绍Java Servlet简单实例分享(文件上传下载demo),包括了Java Servlet简单实例分享(文件上传下载demo)的使用技巧和注意事项,需要的朋友参考一下 项目结构 1.简单实例 ShowServlet.java input.jsp 2.文件上传实例 UploadServlet.java fileupload.jsp 3.文件下载实例 DownloadServlet.j

  • 主要内容:文件下载在实际的项目开发中,文件的上传和下载可以说是最常用的功能之一,例如图片的上传与下载、邮件附件的上传和下载等。在《 Spring MVC 文件上传》一节中我们介绍了文件的上传,本节我们将对 Spring MVC 中的文件下载功能进行讲解。 文件下载 文件下载的含义十分简单,它指的就是将服务器中的文件下载到本机上。 下面我们就结合一个实例,来演示下如何在 Spring MVC 中实现文件的下载功能,可

  • 在事件分析报告中,可对已生成的报告进行导出,导出按钮位置如图。 每日导出次数根据版本不同有所限制,剩余次数会在导出确认框中进行提示。 开通全量导出的用户,可在导出时选择是否全量导出。 导出后的报告,可在管理-分析云设置-分析云下载中进行下载,下载次数无限制。