当前位置: 首页 > article >正文

博客摘录「 SpringBoot大文件(百M以上)的上传下载实现技术」2024年8月2日

上传大附件问题如何设计?大附件上传时如果没有进度条,用户以为是系统的bug。需要将文件截断成文件分片,逐个上传分片;最后一个步骤是将文件分片合并成一个文件后上传的ftp服务器。上传分片接口如下所示。

@ResponseBody
@PostMapping(value = "/upload")
public Result<?> upload(@RequestParam("file") MultipartFile multipartFile, HteAttachInfoVo attachInfoVo, HttpServletRequest request, HttpServletResponse response) throws Exception {
   try {
      HteAttachInfoVo vo = null;
      String tempPath = com.haday.tp.attachment.core.util.FileUtil.concatPath(System.getProperty("java.io.tmpdir"), AttachConstants.TEMP_PATH, IdUtil.fastSimpleUUID(), multipartFile.getOriginalFilename());
      File tempFile = new File(tempPath);
      if (!tempFile.getParentFile().exists() && !tempFile.getParentFile().mkdirs()) {
         return Result.error("无法创建临时文件:" + tempPath);
      }
      try{
               multipartFile.transferTo(tempFile);
         vo = attachInfoService.uploadChunk(tempFile, attachInfoVo);
         response.setStatus(HttpServletResponse.SC_OK);
      } catch (Exception e) {
         e.printStackTrace();
         log.error("上传文件失败:{}", e.getMessage());
         response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
         return Result.error("上传文件失败:"+e.getMessage());
      } finally {
      }
      return Result.OK(vo);
   }catch (Exception e){
      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
      return Result.error("上传文件失败:"+e.getMessage());
   }

}

下载时,将分片的byte按照序号先后写入输出流直到最后一个分片为止。


http://www.kler.cn/news/316985.html

相关文章:

  • 2024年躺平,花大半年的时间,就弄了这一件事儿:《C++面试真题宝典》
  • Python: networkx绘图
  • zabbix入门单机部署
  • tomcat服务搭建部署ujcms网站
  • Flink系列知识之:Checkpoint原理
  • mysql学习教程,从入门到精通,SQL 更新数据(UPDATE 语句)(17)
  • 【赵渝强老师】K8s的DaemonSets控制器
  • Conda虚拟环境配置常见问题记录
  • 提高数据集成稳定性:EMQX Platform 端到端规则调试指南
  • 动态SQL中的foreach标签【后端 21】
  • makefile学习笔记(一)(make架构详解、gcc -o 详解、make构建流程、clean使用、隐式规则和模式规则、自动变量、立即展开和延时展开)
  • Oracle密码过期问题,设置永不过期
  • PCIe进阶之TL:Completion Rules TLP Prefix Rules
  • Tomcat端口号被占用
  • Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)
  • kismet和war driving具体准备(仅供无线安全学习)
  • 【SpringBoot】97、SpringBoot中使用EasyExcel导出/导入数据
  • JAVA并发编程系列之Semaphore信号量剖析
  • Go 1.19.4 路径和目录-Day 15
  • JDK7u21 HashMap版
  • ccfcsp-202112-1、序列查询
  • Python知识点:详细讲解在Python编程中,GIL(全局解释器锁)的影响与规避方法
  • 2024寻找那些能精准修改PDF内容的工具
  • 工控一体机在高精度玻璃检测机中的应用
  • C++11中的可变长模板参数
  • Linux 线程控制
  • 委托的注册及注销+观察者模式
  • C++容器list底层迭代器的实现逻辑~list相关函数模拟实现
  • 安卓LiveData与MutableLiveData的使用
  • 游戏淡入淡出效果