工作中文件下载是一个非常常见的功能,但请求头设置却经常容易忘记。这里写一个样例供大家参考。这里设置文件编码格式,主要防止下载文件中文名乱码。

一、文件下载

1、主要设置 下载的类型
2、设置下载文件的名称

@GetMapping("/downloadFile")public void downloadFile(HttpServletResponse response,@RequestParam("fileContent") Integer fileContent) {File file = null;file = new File(fileContentMap.get(fileContent));try (ServletOutputStream os = response.getOutputStream();BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));){byte[] buff = new byte[1024];String fileName = new String(file.getName().getBytes(), "ISO8859-1");response.setHeader("content-type", "application/octet-stream;charset=ISO8859-1");response.setContentType("application/octet-stream;charset=ISO8859-1");response.setHeader("Content-disposition", String.format("attachment;filename=\"%s\"", fileName));response.setHeader("Content-Length", String.valueOf(file.length()));int i;while ((i=bis.read(buff)) != -1) {os.write(buff, 0, i);os.flush();}} catch (IOException e) {logger.error("viewFile fail fileName is {}", Objects.isNull(file) ? "加载文件是失败" : file.getName(), e);}}}

二、进制视频文件mp4,及图片预览设置

这里是设置预览功能是通过二进制方式,这里需要注意的是,通过二进制预览并不是一个特别好的方式。

private static Map<Integer, String> fileContentMap = new HashMap<Integer,String>();static {fileContentMap.put(1, "F:\\xxx\\xx.mp4");fileContentMap.put(2, ""F:\\xxx\\xx..zip");fileContentMap.put(3, ""F:\\xxx\\xx.docx");fileContentMap.put(4, ""F:\\xxx\\xx..bmp");fileContentMap.put(5, ""F:\\xxx\\xx..png");}/*** 文件预览*/private static Logger logger = LoggerFactory.getLogger(UserController.class);@GetMapping("/viewFile")public void viewFile(HttpServletResponse response,@RequestParam("fileContent") Integer fileContent) {File file = null;file = new File(fileContentMap.get(fileContent));String fileName = file.getName();String fileType = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();try (ServletOutputStream os = response.getOutputStream();BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));){if ("mp4".equals(fileType)) {response.setHeader("content-type", "video/mp4");} else if ("jpg,jpeg,gif,png,bmp".contains(fileType)) {response.setHeader("content-type", "image/" + fileType);} else {response.setHeader("Content-disposition", String.format("attachment;filename=\"%s\"", new String(fileName.getBytes(), "ISO8859-1")));response.setHeader("Content-Length", String.valueOf(file.length()));response.setHeader("content-type", "application/octet-stream;charset=ISO8859-1");response.setContentType("application/octet-stream;charset=ISO8859-1");}byte[] buff = new byte[1024];int i;while ((i=bis.read(buff)) != -1) {os.write(buff, 0, i);os.flush();}} catch (IOException e) {logger.error("viewFile fail fileName is {}", Objects.isNull(file) ? "加载文件是失败" : file.getName(), e);}}

文件下载和二进制文件(图片、mp4视频)预览响应头的设置(防止中文名名乱码)相关推荐

  1. Layui.open 弹出上传图片、视频预览

    Layui.open弹出图片及视频预览 图片预览 视频预览 图片预览 注:imgHtml 外部不加div时,如果图片是一张长图,则预览效果非常不好,加了div弹出层有滚动条,可以很方便的预览长图. h ...

  2. android显示视频预览

    android 11 kotlin显示视频预览 权限 读sd卡中的mp4文件的权限 <uses-permission android:name="android.permission. ...

  3. C# 实现视频预览功能(附源码)

    C# 实现视频预览功能 最近新同事在项目中遇到一个难题,如何实现本地视频的预览功能? 我首先想到的是利用Emgu CV 来实现此功能. C/C++中用的是Open CV ,为了使其可以用在.net环境 ...

  4. iOS截取视频预览图,截图方向错误的解决

    2019独角兽企业重金招聘Python工程师标准>>> 今天在修改项目bug的时候遇到了,截图视频预览图的时候总是方向不对,竖屏录制的视频(好像是竖屏录制截图出的错,记不太清楚了?) ...

  5. 教你如何关闭Win7视频预览节约资源

    前天我发现我的电脑打开E盘的文件夹,文件夹自动关闭,试了很多次都一样,开始以为中毒,查杀没有病毒,百度一问,才明白是因为我的E盘放了很多电影,尤其是AVI格式的.因为系统开启了显示视频预览.占用资源太 ...

  6. 前端视频预览功能的实现

    CSDN话题挑战赛第2期 参赛话题:前端技术分享 目录: ✨✨✨前言 ✨✨✨前置准备 ✨✨✨概述 ✨✨✨实现过程及代码 ✨✨✨效果展示 ✨✨✨资料源 ✨✨✨github链接 ✨✨✨前言 这是我模仿B站 ...

  7. tinymce编辑器上传本地视频预览

    小白一枚,最近搞搞tinymce编辑器上传视频预览,视频标签变成了图片标签问题,看看之前其他博主的说明,感jio好麻烦,官网的也没整明白,所以自己瞎整整.勿喷!勿喷!勿喷!重要事情说三遍 首先是在ti ...

  8. antd vue upload组件上传视频并实现视频预览

    antd vue upload组件上传视频并实现视频预览 html代码 <form><a-form-itemlabel="商品视频":labelCol=" ...

  9. Python - 如何在Tkinter窗口中显示视频预览

    from moviepy.editor import * from moviepy.video.fx.resize import resize import pygame pygame.display ...

最新文章

  1. java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment
  2. python私有函数
  3. 分数混合运算简便方法_分数四则混合运算
  4. java后台访问接口
  5. [转载] 启用和禁用 Reporting Services 的客户端打印和导出文件格式
  6. 文献记录(part25)--ACDnet An action detection network for real-time edge computing based on flow-guided
  7. 第18次csp认证 201912-1 报数(C++)
  8. mybatis常用方法总结
  9. 使用标准库函数对象的例子
  10. 快速计算--斐波那契数列
  11. Android之gdbserver/gdb调试
  12. endnote按照apa6th格式复制_使用Endnote进行文献引用
  13. IBM R52和T43 换硬盘报错 信息2010错误 解决方法
  14. adobe flash player android 4.4,adobe flash player最新版
  15. Python列表是数组吗?
  16. date.getMonth() date.getDate())
  17. 来聊一聊广告主“又爱又恨”的EDM营销那档子事儿!
  18. 分布式商城项目--dubbo 服务的发布和引用。
  19. Problem K.将军棋
  20. 重磅!李飞飞、颜宁等9位华人当选美国艺术与科学院院士,DeepMind创始人也成新晋院士!

热门文章

  1. mercury MW300R(mt7620n)GPIO研究
  2. 第五人格亚服服务器不稳定,【关于第五人格网络问题的部分原因及解决方法】...
  3. 优维助力国内某省级商业银行同城异地灾备自动化建设
  4. java会员卡的绑定和解绑_java毕业设计_springboot框架的健身房会员卡管理
  5. html显示隐藏图片,简单的图片显示与隐藏
  6. apns 苹果服务器压力,[iOS]APNs推送机制
  7. 如何修改Linux字体大小,如何更改字体并调整字体大小?
  8. SpringBoot项目没有@RunWith注解
  9. sockjs-node报错
  10. Rockchip DRM RK628 Porting Guide