文件下载方法

news/2025/3/4 13:43:31/文章来源:https://www.cnblogs.com/yanyu1314/p/18750356
  1. 通用下载
 1 package com.stig.business.web.contoller;
 2 
 3 import com.stig.business.web.mobel.po.EbssFileInfo;
 4 import com.stig.common.constant.Constants;
 5 import com.stig.common.properties.BusStopSignProperties;
 6 import com.stig.common.utils.RedisUtils;
 7 import com.stig.common.utils.StringUtils;
 8 import com.stig.common.utils.file.FileUtils;
 9 import lombok.extern.slf4j.Slf4j;
10 import org.springframework.http.HttpStatus;
11 import org.springframework.http.MediaType;
12 import org.springframework.web.bind.annotation.*;
13 
14 import javax.annotation.Resource;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17 import java.net.URLEncoder;
18 import java.nio.charset.StandardCharsets;
19 
20 @Slf4j
21 @CrossOrigin
22 @RestController
23 @RequestMapping("/common")
24 public class CommonController {
25 
26     @Resource
27     private RedisUtils redisUtils;
28 
29 
30     /**
31      * 通用下载请求(文件id方式)
32      *
33      */
34     @GetMapping("download/{fileId}")
35     public void fileDownload(@PathVariable("fileId") String fileId, HttpServletResponse response,
36                              HttpServletRequest request) {
37         EbssFileInfo ebssFileInfo = redisUtils.getCacheMapValue(Constants.REDIS_ADVERT_RESOURCE_KEY,fileId);
38         if(ebssFileInfo == null || StringUtils.isBlank(ebssFileInfo.getFilePath())){
39             response.setStatus(HttpStatus.NOT_FOUND.value());
40             return;
41         }
42         String realFilePath = BusStopSignProperties.getProfile() + StringUtils.substring(ebssFileInfo.getFilePath(),Constants.RESOURCE_PREFIX.length());
43         try {
44             response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
45             String encode = URLEncoder.encode(ebssFileInfo.getOriginalFilename(), StandardCharsets.UTF_8.toString());
46             String percentEncodedFileName = encode.replaceAll("\\+", "%20");
47             StringBuilder contentDispositionValue = new StringBuilder();
48             contentDispositionValue.append("attachment; filename=")
49                     .append(percentEncodedFileName)
50                     .append(";")
51                     .append("filename*=")
52                     .append("utf-8''")
53                     .append(percentEncodedFileName);
54             response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
55             response.setHeader("Content-disposition", contentDispositionValue.toString());
56             response.setHeader("download-filename", percentEncodedFileName);
57             FileUtils.writeBytes(realFilePath, response.getOutputStream());
58         } catch (Exception e) {
59             log.error("下载文件失败", e);
60         }
61     }
62 
63 }
View Code

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893391.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Charles安装及使用教程

一. 简介及安装 一、charles的使用 1.1 charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,能够在Windows,Mac,Linux上使用。安装Charles的时候要…

47.9K star!全平台开源笔记神器,隐私安全首选!

"Joplin 是一款开源的笔记记录和待办事项应用,支持端到端加密同步,完美替代商业笔记软件" —— 来自开发者 Laurent Cozic嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法"Joplin 是一款开源的笔记记录和待办事项应…

什么是项目管理?五大流程是什么?

项目管理这东西,大家可能听过,但是具体怎么操作,很多人可能就一头雾水了。 简单来说,项目管理就是为了完成某个特定目标,把时间、资源、人员等因素有条不紊地组织、协调、控制和调整,最终确保项目按时、按预算、高质量地完成。 这个“项目”可以是任何东西,比如公司新产…

最全面的浏览器教程-完结撒花

完结撒花 🎉🎉🎉完结撒花 🎉🎉🎉 《最全面的浏览器教程》目前要告一段落了,耗时我一个多月,整理了大量的笔记,参考了很多教程和文章,累计写了 24 篇文章,7.3 万字,200 多张图片,收获了很多粉丝和鼓励,在此表示感谢。 如果后续有学到什么新技巧,看到好玩意…

牛客题解 | 字符串相乘

牛客题库题解题目 题目链接 题解 题目难度:中等难度 知识点:字符串、大数相乘 模拟人工计算 计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。数组a存储第一个数字123(逆序)数组b存储第二数组20(逆序)结果存入数…

皮尔逊、斯皮尔曼、肯德尔相关系数

相关系数和特征选择 相关系数和特征选择,一个是属性,一个是特征。一般,把数据集中的各列成为属性,而对算法模型表现有益的属性成为特征。例如,在预测泰坦尼克乘客的存活情况时,乘客姓名这个属性对我们的预测可能没有帮助,甚至会干扰模型表现;而乘客年龄、性别或许与存活…

认识 TapFlow,以编程方式运行 TapData

TapFlow 是 TapData Live Data Platform 最新推出的一个面向编程的API 框架。TapFlow 可以让开发者和数据工程师用一个简单易用而又强大的编程语言来进行数据管道和数据模型的开发工作。**什么是TapFlow? ** TapFlow 是 TapData Live Data Platform 最新推出的一个面向编程的A…

Maya 影视渲染,渲染101 让创作无压力!

Maya 创作时,渲染是不是常让人崩溃?漫长等待、电脑性能不足、报错频出,今天就给大家分享基于渲染 101 平台的 Maya 云渲染,轻松解决这些难题!告别漫长等待,效率飙升**** 自己电脑渲染复杂 Maya 项目,耗时久,进度慢。渲染 101 的云渲染有强大计算集群,众多高性能服务器…

Java SpringBoot 升级后,编译打包都没问题,运行报错

编译打包都没问题,运行报错 10:36:39,587 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5966cc - Registering current configuration as safe fallback point Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core…

在Hyper-V虚拟化平台上,怎么创建和管理虚拟机呢?

确实,在Hyper-V虚拟化平台上,创建和管理虚拟机(VMs)是实现资源高效利用和业务灵活部署的关键。以下是对这一观点的详细阐述:一、创建虚拟机:资源高效利用的基础 资源分配与优化: 在创建虚拟机时,管理员需要根据业务需求合理分配CPU、内存、存储和网络等资源。通过精确的…

STM32实战——ESP8266 WIFI模块

此篇博文提供了ESP8266的开发指南,包括在STM32上使用ESP8266进行WiFi连接、发送和接收HTTP请求以及在ESP8266中使用AT指令发送GET方式请求等内容。ESP8266 硬件介绍 ESP8266系列模组有哪些:在本实验中,ESP8266与ESP-01不做区分。 ESP-01引脚介绍:引脚 功能3.3 3.3V供电,避…