redis奇巧淫记之保存文件
创始人
2025-05-28 08:14:44
0

案例背景,我不想生成文件到服务器上面,同时这个文件是限时访问的,所以就有了如下需求 

本Demo的核心是使用Base64编码和解码,

配置application.yml,使其允许上传100M的附件

spring:servlet:multipart:max-file-size: 100MBmax-request-size: 100MB

 控制层代码

package com.example.demo11.Controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Base64;
import java.util.Date;@RestController
@RequestMapping("/file")
public class DownExcel {@Autowiredprivate RedisTemplate redisTemplate;@PostMapping("/uploadFile")public Long uploadFile(MultipartFile file) throws IOException {String value=Base64.getEncoder().encodeToString(file.getBytes());long key = new Date().getTime();ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("File:" + key, value);redisTemplate.expireAt("File:" + key, new Date(new Date().getTime() + 4000000));return key;}@GetMapping("/File/{key}")public void file(@PathVariable("key") String key, HttpServletRequest request, HttpServletResponse response) {ValueOperations valueOperations = redisTemplate.opsForValue();Object o = valueOperations.get("File:" + key);if (o != null) {response.setContentType("application/x-download");ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();byte[] decode = Base64.getDecoder().decode(o.toString());outputStream.write(decode);} catch (IOException e) {throw new RuntimeException(e);} finally {try {if (outputStream != null) {outputStream.close();}} catch (IOException e) {throw new RuntimeException(e);}}}}}

静态化配置类()

package com.example.demo11.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){// 准备RedisTemplate对象RedisTemplate redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(connectionFactory);// 创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 设置key的序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// 设置value的序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);// 返回return redisTemplate;}}

上传文件

Linux使用如下命令

curl -X POST -F 'file=@/home/rock/Desktop/无标题.png' http://10.147.17.25:8080/file/upload

 Windows使用如下命令和参数

curl -X POST -H "Content-Type: multipart/form-data" -F "file=@D:/scrcpy/adb.exe" http://10.147.17.25:8080/file/upload

或者使用Apifox工具进行测试 

相关内容

热门资讯

台湾宜兰县海域发生6.6级地震... 央视新闻消息,中国地震台网正式测定:12月27日23时05分在台湾宜兰县海域(北纬24.67度,东经...
一杯热牛奶的治愈力:乳业如何在... 随着气候的异常,这个冬天很多人都感到忽冷忽热,免疫力下降,数据也证明了这一点。2025年第49周中国...
全国八成帝王蟹,竟来自这个东北... 订阅 快刀财经 ▲ 做您的私人商学院帝王蟹的红火给这座边境城市带来了生机。作者 :朱秋雨来源:盐财经...
Omdia:三季度印度智能手机... 10月22日消息,Omdia最新研究数据显示,2025年第三季度,印度智能手机市场同比增长3%,出货...
全球首个机场出发层 VPD 启... 6月14日消息,全球首个支持机场出发层泊车代驾VPD落地广州白云机场,用户开着传祺向往M8乾崑系列 ...
同力股份:无人驾驶产品目前已完... 新京报贝壳财经讯(记者黄鑫宇)2025年12月26日晚,北交所上市公司陕西同力重工股份有限公司(即“...
新消费周报 | 淘宝闪购开通无... 《CBNData新消费周报》精选本周新消费领域最新动态,公司头条、消费风向、智能创新、营销动态、可持...
穿越波动的稳健之选:优质可转债... 作者:烟雨导语:在当下复杂多变的市场环境中,可转债因其"股债双性"的独特优势,成为投资者平衡风险与收...
6天4板!华联控股拟12.35... Arizaro项目LCE(碳酸锂当量)总资源量概要。 图源:华联控股公告本报记者 李贝贝 上海报道1...
触及重大违法行为,或将被退市!... 本文来源:时代周报 作者:林昀肖12月26日,*ST长药(300391.SZ)公告称,公司因涉嫌定期...