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

Spring Boot--文件上传和下载

文件上传和下载

  • 前言
  • 文件上传
    • 1、以MultipartFile 接口流文件,流的名称需要和前台传过来的名称对应上
    • 2、获取到文件名称截取后缀
    • 3、为了放置文件名重复使用uuid来随机生成id+后缀
    • 4、判断转存路径中是否有这个文件夹如果没有就创建
    • 5、将文件存储到转存的目录中
  • 文件下载
    • 1、通过输入流获取到文件
    • 2、通过输出流输出文件
    • 3、判断文件读取是否完成,如果为-1就是读取完成
    • 4、读取陈工后写入到输出流并返回
    • 5、关闭资源

前言

文件上传是指本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览和下载的过程
文件上传的前提调节:
必须将file的流以formdata的形式传参,并且必须以post请求提交

文件上传

在这里插入图片描述

1、以MultipartFile 接口流文件,流的名称需要和前台传过来的名称对应上

2、获取到文件名称截取后缀

3、为了放置文件名重复使用uuid来随机生成id+后缀

4、判断转存路径中是否有这个文件夹如果没有就创建

5、将文件存储到转存的目录中

文件下载

在这里插入图片描述

1、通过输入流获取到文件

2、通过输出流输出文件

3、判断文件读取是否完成,如果为-1就是读取完成

4、读取陈工后写入到输出流并返回

5、关闭资源

package com.example.ruiji_demo.controller;import com.example.ruiji_demo.common.R;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;/*** @author jitwxs* @date 2024年04月03日 18:17*/
@Slf4j
@RestController
@RequestMapping("/common")
public class CommponContreller {
//    获取转存的地址@Value("${reggie.path}")private String basePath;//    定义上传文件的接口@PostMapping("/upload")public R<String> upload(MultipartFile file){String originalFilename = file.getOriginalFilename();
//        截取后缀String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//        使用uuid重新生成文件名,放置文件名称重复String filName = UUID.randomUUID().toString()+suffix;//        判断目录是否存在如果不存在就创建目录File dir = new File(basePath);if(!dir.exists()){dir.mkdir();}try {
//            将临时文件转存到指定位置file.transferTo(new File(basePath+filName));} catch (IOException e){e.printStackTrace();}return R.success("上传成功");}//    定义下载接口@GetMapping("/download")public void download(String name, HttpServletResponse response){try{
//            输入流,通过输入流读取文件内容FileInputStream fileInputstream = new FileInputStream(new File(basePath+name));
//            输出流,通过输出流将文件写入浏览器,在浏览器中展示图片ServletOutputStream outputStream = response.getOutputStream();//            返回的文件格式
//            response.setContentType("image/jpeg");
//            判断文件的长度int len = 0;byte[] bytes = new byte[1024];while((len = fileInputstream.read(bytes)) != -1){outputStream.write(bytes,0,len);outputStream.flush();}//            关闭资源outputStream.close();fileInputstream.close();}catch(Exception e){e.printStackTrace();}}}
http://www.lryc.cn/news/331310.html

相关文章:

  • hexo博客7:构建简单的多层安全防御体系
  • 《捕鱼_ue4-5输出带技能的透明通道素材到AE步骤》
  • (免费分享)基于微信小程序自助停取车收费系统
  • Vue3_2024_7天【回顾上篇watch常见的后两种场景】___续
  • Gemini即将收费,GPT无需注册?GPT3.5白嫖和升级教程
  • 【协议篇:Http与Https】
  • WPS二次开发系列:WPS SDK初始化
  • EXCEL地理数据处理工具(地图任务)
  • 软件设计原则:迪米特法则
  • MongoDB聚合运算符:$max
  • 神经网络学习笔记10——RNN、ELMo、Transformer、GPT、BERT
  • Java23种设计模式
  • pieces of cake concerning torchtorchvision
  • 如何在Python中处理JSON数据?
  • 站群服务器如何提高搜索引擎排名
  • Redis安装-Docker
  • day16-二叉树part03
  • 上位机图像处理和嵌入式模块部署(qmacvisual亮度检测)
  • 防止推特Twitter账号被冻结,应该选什么代理类型IP?
  • 【二叉树】Leetcode 114. 二叉树展开为链表【中等】
  • 2024年150道高频Java面试题(二十)
  • Docker-Compose容器编排
  • nvm 安装多个版本的Node npm
  • RisingWave 在品高股份 Bingo IAM 中的应用
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • 尚硅谷2024最新Git企业实战教程 | Git与GitLab的企业实战
  • 2024阿里云老用户服务器优惠价格99元和199元
  • 【前端webpack5高级优化】提升打包构建速度几种优化方案
  • 【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析
  • Java面试题:Java集合框架:请简述Java集合框架的主要组成部分,并解释它们之间的关系。