springboot文件上传和下载接口的简单思路

springboot文件上传和下载的简单思路

  • 文件上传
  • 文件下载

文件上传

在springboot中,上传文件只需要在接口中通过 MultipartFile 对象来获取前端传递的数据,然后将数据存储,并且返回一个对外访问路径即可。一般对于上传文件的文件名,都要通过uuid进行处理。

@RestController
@RequestMapping("/file")
public class FileController {// 服务器存储位置private static  String parentPath = "D:\\IdeaProjects\\demoZ\\src\\main\\resources\\static\\";// 上传接口@RequestMapping("/upload")public String uploadFile(@RequestParam MultipartFile file) throws IOException {String originalFilename = file.getOriginalFilename(); // 获取文件名String type = file.getContentType(); // 获取文件类型long size = file.getSize(); // 获取文件大小// 这里只对一种类型进行了简单判断,可以自行修改if ("image/jpeg".equals(type)){type = ".jpg";}// 构建uuid作为唯一标识String uuid = UUID.randomUUID().toString()+type;File uploadFile = new File(parentPath+uuid);// 判断父级目录是否存在,不存在则创建File parentFile = uploadFile.getParentFile();if(!parentFile.exists()){parentFile.mkdirs();}// 文件存储到磁盘上file.transferTo(uploadFile);// 返回对外访问路径return "http://localhost:9090/file/"+uuid;}
}

在这里插入图片描述
在这里插入图片描述

文件下载

文件下载的话,只需要在接口中传入文件的uuid名称,然后通过流的方式直接输出即可。

@RestController
@RequestMapping("/file")
public class FileController {private static  String parentPath = "D:\\IdeaProjects\\demoZ\\src\\main\\resources\\static\\";// 文件上传接口....// 文件下载接口@RequestMapping("/{uuid}")public void download(@PathVariable String uuid, HttpServletResponse response) throws IOException {// 通过response将数据输出// 根据文件的唯一标识码获取文件File uploadFile = new File(parentPath+uuid);// 设置输出流的格式ServletOutputStream os = response.getOutputStream();response.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(uuid,"UTF-8"));response.setContentType("application/octet-stream");// 创建文件输入流FileInputStream fis = new FileInputStream(uploadFile);// 读取文件的字节流byte[] buf = new byte[1024];int readLen = 0;while ((readLen=fis.read(buf))!=-1){// 边读边写os.write(buf,0,readLen);}os.flush();os.close();}
}

tips:通过文件上传的返回值即可测试下载接口 http://localhost:9090/file/59038923-ea78-40df-970e-70f49dc966b3.jpg

这里的话,为了简单就只写了后端的文件上传和下载,没有涉及到数据库的文件信息存储,正常情况下是根据你文件的唯一标识去获取下载这张图片的url地址的。(不过接口写的没问题哈)

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

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

相关文章

C语言 冒泡排序

目录 一、原理 二、代码演示 三、代码优化 一、原理 假设: int arr[] { 9,8,7,6,5,4,3,2,1,0 }; 将 arr 内的元素进行升序排列,得到一个新的数组 int arr[] { 0,1,2,3,4,5,…

【HTML】<input>

分类 text password number button reset submit hidden radio checkbox file image color range tel email(火狐有校验,360浏览器无校验。) url datetime(火狐、360浏览器不支持) search date、month、week、time、da…

自动测试框架airtest应用一:将XX读书书籍保存为PDF

一、Airtest的简介 Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要…

prometheus监控k8s服务并告警到钉钉

一、监控k8s集群 要监控k8s集群需要使用到以下服务用于收集监控的资源信息,node_exporter用于监控k8s集群节点的资源信息,kube-state-metrics用于监控k8s集群的deployment、statefulset、daemonset、pod等的状态,cadvisor用于监控k8s集群的p…

anaconda 基本指令

1.anaconda添加源 这两行命令分别添加了清华Anaconda 仓库的 main 和 free 镜像源。 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/2.anac…

Xcode 基座打包

Xcode基座打包-APP更新版本内容无效 问题:解决: 问题: 使用xcode基座打包之后,上传到appstore进行提审发布。 用户在appstore商城进行更新下载,打开更新后的APP发现版本号是最新的,APP里面的其他内容还是上…

docker安装Nacos的《小白专用》详细教程

1.CentOS安装docker 安装docker yum -y install docker 设置开机自启 systemctl enable docker 启动docker systemctl start docker 查看docker当前的版本 docker version做到这里呢基本上你的docker就安装了一大部分了,当然也有那些无法安装的人,那我建…

【数据结构】队列及其实现

目录 1.队列的概念及结构 2.队列的实现 2.1队列结构定义 2.2队列的初始化及销毁 2.3数据入队 2.4数据出队 2.5访问队头数据 2.6访问队尾数据 2.6判断队列是否为空 2.7求队列的大小 2.7打印队列 1.队列的概念及结构 队列:只允许在一端进行插入数据操作&…

(el-Form)操作(不使用 ts):Element-plus 中 Form 表单组件校验规则等的使用

Ⅰ、Element-plus 提供的 Form 表单组件与想要目标情况的对比: 1、Element-plus 提供 Form 表单组件情况: 其一、Element-plus 自提供的 Form 代码情况为(示例的代码): // Element-plus 自提供的代码: // 此时是使用了 ts 语言环…

心法利器[90-95] | 谈校招:合集

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里&…

【ROS】fsd_algorithm架构学习与源码分析(致敬)

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍fsd_algorithm架构学习与源码分析。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&am…

Prometheus技术文档-概念

Prometheus是一个开源的项目连接如下: Prometheus首页、文档和下载 - 服务监控系统 - OSCHINA - 中文开源技术交流社区 基本概念: Prometheus是一个开源的系统监控和告警系统,由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种…