SpringBoot整合七牛云实现图片的上传管理

唠嗑部分

各位小伙伴大家好,我是全栈小白,今天我们来分享一下SpringBoot如何整合七牛云存储实现图片的上传与存储

首先我们来说说图片存储,在项目中图片几乎是必不可少的,那么大家会选择怎样存储呢,当然有几种方案

1、将图片直接上传至服务器上,使用nginx搭建静态资源服务器进行访问。

2、单独搭建文件服务器。

3、使用开源的分布式文件存储系统

4、使用第三方的云存储,七牛云、阿里云、腾讯云等

优缺点分析:

第一、二种:使用方便、直接将文件放到目录中,成本低,缺点是文件安全性低、不易扩展,加载速度慢

第三种:高容错性,数量级GB、TB、PB都支持件规模适合存储百万规模的数据,缺点是需要自己搭建,成品高

第四种:相对来说较方便、一定容量内免费使用,直接通过api进行文件操作,缺点是超过一定量后会收费、扩展收费

只不过对于我们自己使用的话,第四种足够了

言归正传

一、七牛云账号注册

七牛云文件存储是免费的,只不过每个月都要重新绑定一次域名,域名会换,自己有域名的话可以绑定自己的域名

1、七牛云账号注册

官网:https://www.qiniu.com/

image-20240417105711654

填写信息进行注册

image-20240417105733932

暂不绑定,进入控制台

image-20240417105943297

绑定邮箱、实名认证

image-20240417110038539

绑定邮箱、实名认证成功后

image-20240417110348772

回到主页,点击新建存储空间

image-20240417112944379

名称随便填写,存储区域随便选,访问控制选择公开

image-20240417113143908

创建成功后,有两个选项

如果你自己有域名,可以绑定自己的域名,就不用每个月都来重新绑域名了

如果你没有或者不想配置,就选择好的,我知道了,我没有,选择第二项

image-20240417113247352

进入空间后

image-20240417113601483

二、SpringBoot整合并使用

七牛云JavaSDK开发者文档地址:https://developer.qiniu.com/kodo/1239/java

基本的操作都有,咱们就不看了,直接开始干

image-20240417114004415

1、创建SpringBoot项目,导入依赖

创建过程省略,部分依赖省略

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--        mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!--        模板依赖--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.45</version></dependency><!--        七牛云javaSDK--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.13.0, 7.13.99]</version></dependency>
</dependencies>

2、配置文件application.yml

server:port: 8080spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///qiniuyun-cloud-file-upload?characterEncoding=utf-8&useSSL=falseusername: rootpassword: 123456
# mybatis-plus相关配置
mybatis-plus:type-aliases-package: com.cxs.modelmapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImplqiniuyun:upload:# 七牛云访问akaccessKey: 1REeC45m0AiPmF3ElxPE5qKRrYsBO_xZZcwet-ar# 七牛云访问sksecretKey: iihMNq4wrfJAlnH3P_H2jb7T_I4Wqez7roVCVz8u# 你自己创建的空间名bucket: xiaobai-images# 表示在空间下穿件什么目录存储上传的图片mkdir: images/# 七牛云分配给你空间的域名domain: http://sc2howc0o.hb-bkt.clouddn.com/

AKSK获取位置说明

点击头像,秘钥管理

image-20240417113717355

复制AKSK到配置文件中

注意:用你自己的,我的不能用

image-20240417114433530

3、主要接口

/** @Project:cloud-file-upload* @Author:cxs* @Motto:放下杂念,只为迎接明天更好的自己* */
@RestController
@RequestMapping("/images")
public class FileController {@Autowiredprivate ImagesService imagesService;/*** 文件上传* @param file* @return* @throws IOException*/@PostMapping("/upload")public BaseResult upload(MultipartFile file) throws IOException {BaseResult result = BaseResult.ok();imagesService.uploadImage(file, result);return result;}/*** 获取文件列表* @param dto* @param request* @return*/@PostMapping("/getImagesList")public BaseResult getImagesList(@RequestBody BaseRequest dto, HttpServletRequest request){BaseResult result = BaseResult.ok();imagesService.getImagesList(dto, request, result);return result;}/*** 删除文件* @param id* @param request* @return*/@DeleteMapping("/removeImages/{id}")public BaseResult removeImages(@PathVariable("id") Integer id, HttpServletRequest request){BaseResult result = BaseResult.ok();imagesService.removeImages(id, request, result);return result;}
}

4、文件上传的主要代码

public String imageUploadGetUrl(MultipartFile file, BaseResult result) {String url = null;// 获取文件的源文件名String originalFilename = file.getOriginalFilename();// 截取后缀String postFix = originalFilename.substring(originalFilename.lastIndexOf("."));// 生成新的文件名String fileNewName = UUID.randomUUID().toString().replace("-", "") + postFix;//  判断上传的文件后缀是否符合要求if (!Arrays.asList(arrImg).contains(postFix)) {result.setCode(-1).setMsg("上传失败,类型暂不支持");return null;}// 创建七牛云AuthAuth auth = Auth.create(accessKey, secretKey);// 创建上传对象,Region.region1()表示华北Configuration cfg = new Configuration(Region.region1());cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本cfg.useHttpsDomains = false;UploadManager uploadManager = new UploadManager(cfg);try {// 调用put方法上传String token = auth.uploadToken(bucket, null, 3600, new StringMap().put("insertOnly", 1));if(!StringUtils.hasLength(token)) {result.setCode(-1).setMsg("上传失败");return null;}String fullName = mkdir + fileNewName;// 解析出文件的keyResponse res = uploadManager.put(file.getBytes(), fullName, token);DefaultPutRet putRet = JSON.parseObject(res.bodyString(), DefaultPutRet.class);if (res.isOK()) {result.setData(putRet.key);// 拼接图片访问路径url = qiNiuDomain + fullName;} else {result.setCode(-1).setMsg("上传失败");}} catch (Exception e) {log.error("", e);result.setCode(-1).setMsg("上传失败");}return url;
}

关于Region的说明,我选择的是华北,根据你自己选择的修改

image-20240417115411277

5、删除文件的主要代码

public void removeCloudImage(String key, BaseResult result) {try {Auth auth = Auth.create(accessKey, secretKey);// 创建上传对象Configuration cfg = new Configuration(Region.region1());BucketManager bucketManager = new BucketManager(auth, cfg);Response res = bucketManager.delete(bucket, key);if (!res.isOK()) {result.setCode(-1).setMsg("删除失败");}} catch (QiniuException e) {e.printStackTrace();}
}

结语

1、完结撒花,制作不易,点赞、分享、在看再走吧,您的支持永远是我最大的动力!

2、完整代码案例获取:下方公众号名片

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

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

相关文章

Science Robotics 美国斯坦福大学研制了外行星洞穴探测机器人

月球和火星上的悬崖、洞穴和熔岩管已被确定为具有地质和天体生物学研究理想地点。由于其隔绝特性&#xff0c;这些洞穴提供了相对稳定的条件&#xff0c;可以促进矿物质沉淀和微生物生长。在火星上&#xff0c;这些古老的地下环境与火星表面可能适合居住时几乎没有变化&#xf…

JSP合同信息管理系统

毕业设计&#xff08;论文&#xff09; 题 目&#xff1a; JSP合同信息管理系统 学 校&#xff1a; 专 业&#xff1a; 年 级&#xff1a; 姓 名…

Day16-Java进阶-线程通信线程生命周期线程池单例设计模式

1. 线程通信 1.1 线程通信介绍 1.2 两条线程通信 package com.itheima.correspondence;public class CorrespondenceDemo1 {/*两条线程通信*/public static void main(String[] args) {Printer1 p new Printer1();new Thread(new Runnable() {Overridepublic void run() {syn…

【亲测有用】idea2024.1中前进后退按钮图标添加

idea更新后&#xff0c;前进后退按钮消失了&#xff0c;现在说下怎么设置 具体操作如下&#xff1a; 1、选择 File / Settings(windows版)&#xff0c;或者Preferences(mac版) 2、打开 Appearance & Behavior 并选择 Menus and Toolbars 3、选择右侧的 “Main toolbar lef…

Python中pyside2出现的pyside2 qt platform plugin could be in错误及其解决方法

系统平台&#xff1a;Win10 64bit python版本&#xff1a; python 3.8 使用pip install pyside2安装 pyside2 这是找不到QT平台的插件&#xff0c;这是环境变量QT_QPA_PLATFORM_PLUGIN_PATH出现错误 具体解决方法&#xff1a; 我们可以在每一段程序开始之前设定环境变量&…

虚幻引擎5 Gameplay框架(一)

GamePlay概论与打包和批处理脚本 GamePlay简介与创建项目 GamePlay框架&#xff1a;用于设计游戏规则&#xff0c;组织和管理游戏核心逻辑、规则以及交互的一套结构化体系。 Default Pawn Class&#xff1a;定义角色行为逻辑&#xff0c;接收玩家控制器的输入&#xff0c;一般…

【R语言】组合图:散点图+箱线图+平滑曲线图+柱状图

用算数运算符轻松组合不同的ggplot图&#xff0c;如图&#xff1a; 具体代码如下&#xff1a; install.packages("devtools")#安装devtools包 devtools::install_github("thomasp85/patchwork")#安装patchwork包 library(ggplot2) library(patchwork) #p1是…

[ACTF2020 新生赛]Upload--BUUCTF

题&#xff1a; 第一步&#xff1a;上传php文件&#xff0c;他提示&#xff0c;只能上传jpg、png、gif 第二步&#xff1a;使用bp抓上传jpg文件的包&#xff0c;在修改文件后缀名为phtml 修改前 修改后 第三步&#xff1a;进行放过&#xff0c;在访问浏览器 得到&#xff1a;U…

第07-4章 网络层详解

7.1 网络层协议 IP协议ARP&#xff08;地址解析协议&#xff09;RARP&#xff08;反向地址解析协议&#xff09;ICMP&#xff08;互联网控制消息协议&#xff09; 7.2 IP协议详解 7.2.1 IP协议功能 寻址和路由传递服务&#xff08;不可靠&#xff0c;尽最大努力&#xff0c…

线性代数基础1向量

1、向量是什么 1.1、向量的定义 在数学中&#xff0c;向量&#xff08;也称为欧几里得向量、几何向量、矢量&#xff09;&#xff0c;指具有大小和方向的量。它可以形象化地表示为带箭头的线段。箭头所指&#xff1a;代表向量的方向&#xff1b;线段长度&#xff1a;代表向量的…

Rust腐蚀服务器定制地图开服

Rust腐蚀服务器定制地图开服 大家好我是艾西一个做服务器租用的网络架构师。Rust腐蚀这个游戏有很多的插件mod作者&#xff0c;在地图制作这一块也是一样&#xff0c;有些好玩的地图可能大家在map网站找到了但是不知道怎么操作设置那么今天艾西给大家说下特定定制地图怎么弄。…

嬴图| ISO/IEC-GQL国际图语言标准发布,图技术开启新纪元

GQL作为继SQL之后的第二个数据库查询语言国际标准&#xff0c;近日正式发布。这标志着图技术开启新纪元——图时代即将到来&#xff01; 同时&#xff0c;这也预示着将有越来越多的组织采用“图”来解决各种复杂问题&#xff0c;更意味着SQL系统与负载将逐渐转向GQL&#xff0…

2024最新SSL证书在线申请系统源码 | 支持API接口 支持在线付费 二开优化版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 2024最新SSL证书在线申请系统源码 | 支持API接口 支持在线付费 二开优化版 最新SSL证书在线申请系统源码 | 支持API接口 SSL证书保证网络安全的基本保障。向您介绍我们的在线生成SSL…

Ubuntu20.04安装 mysql8.0.32

检查删除原有的mysql(可以不做&#xff0c;自己记录) 1、 下载 MySQL :: Download MySQL Community Server (Archived Versions) wget https://cdn.mysql.com/archives/mysql-8.0/mysql-server_8.0.32-1ubuntu20.04_amd64.deb-bundle.tar 2、解压到指定目录下 tar xvf mysq…

GDPU Java 天码行空9

&#xff08;一&#xff09;实验目的 1、掌握JAVA中异常类型及其特点&#xff1b; 2、重点掌握异常的处理方法&#xff1b; 3、能创建自定义异常处理方法&#xff1b; 4、掌握文件操作方法。 &#xff08;二&#xff09;实验内容和步骤 1、try catch finally 如果catch里面有…

vue封装请求、合并js、合并多个js

vue封装请求、合并js、合并多个js 作为一个后端开发&#xff0c;写前端时发现&#xff0c;每次导入api接口都会有一堆代码&#xff0c;像下面这样&#xff1a; import {footprintList, footprintDelete} from /api/userApi.js import {addressList} from /api/userApi.js impor…

PHP定期给自己网站目录做个特征镜像供快速对比

效果图 上代码&#xff1a; <style> h1{font-size:24px;line-height:180%;font-weight:600;margin:1px 2px;color:#0180cf;} h2{font-size:20px;line-height:140%;font-weight:600;margin:2px 4px;color:green;} h3{font-size:16px;line-height:140%;font-weight:600;m…

如何把视频中的画面保存为图片?免费的工具不用白不用

在数字化时代&#xff0c;截取视频中的珍贵瞬间成为了人们创作、分享和保存回忆的重要方式。 那么&#xff0c;如何迅速捕捉视频中的精彩画面&#xff0c;留存美好瞬间呢&#xff1f;有人说直接截图就可以&#xff0c;如果直接截图就可以&#xff0c;小编就不用写这篇文章了&a…

《深入浅出.NET框架设计与实现》笔记2——C#源码从编写到执行的流程

中间语言&#xff08;Intermediate Language&#xff0c;IL&#xff09; C#编译器在编译时&#xff0c;会将源代码作为输入&#xff0c;并以中间语言形式输入出&#xff0c;该代码保存在*.exe文件中或*.dll文件中。 公共语言运行时&#xff08;CLR&#xff09; 可以将IL代码…

26版SPSS操作教程(高级教程第十三章)

前言 #今日世界读书日&#xff0c;宝子你&#xff0c;读书了嘛~ #本期内容&#xff1a;主成分分析、因子分析、多维偏好分析 #由于导师最近布置了学习SPSS这款软件的任务&#xff0c;因此想来平台和大家一起交流下学习经验&#xff0c;这期推送内容接上一次高级教程第十二章…