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

SpringBoot整合阿里云OSS,实现图片上传

在项目中,将图片等文件资源上传到阿里云的OSS,减少服务器压力。

  1. 项目中导入阿里云的SDK
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>
</dependency>
  1. 为自己的OSS创建访问的AccessKey,有了AccessKey程序就可以访问账户资源的API了。


    这就是AccessKey

然后将AcessKey的key和secret、OSS的区域节点以及bucket名称配置到配置文件中,

alioss:accessKeyId: LTAI5xxxxxxxxxxxxFUDMoyaccessKeySecret: KxxxxxxxxxxxxxxxxxIendpoint: oss-cn-qingdao.aliyuncs.combucketName: kkbank
  1. 封装工具类,去读取配置文件中的AccessKey、endpoint、bucketName,注意配置文件中的名称要与属性名保持一致,负责无法为属性赋值。

@Data
@Slf4j
@Component
@ConfigurationProperties(prefix = "alioss") // 配置文件中,配置信息的前缀
public class AliOssUtil {private String endpoint;    // 区域private String accessKeyId; // keyprivate String accessKeySecret; // secretprivate String bucketName;  // bucket名称/*** 文件上传* 需要获取阿里云OSS中 AccessKey和 bucket所在的区域* @param fileName* @param inputStream* @return*/public String upload(String fileName, InputStream inputStream) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 文件在OSS中存储的路径,此处使用日期 + 当前的毫秒数 + 文件名称 来作为文件名,防止文件重名String objectName = "images/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date())+ "/" + System.currentTimeMillis() +"-"+fileName;try {//解决图片预览问题(默认是下载)ObjectMetadata metadata = new ObjectMetadata();// 获取文件类型metadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));// 创建PutObject请求,开始传输文件ossClient.putObject(bucketName, objectName, inputStream,metadata);} catch (OSSException oe) {System.out.println("Error Message:" + oe.getErrorMessage());} catch (ClientException ce) {System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {// 释放连接ossClient.shutdown();}}// 此时,文件上传完成,应该立即预览//文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);log.info("文件上传到:{}", stringBuilder.toString());// 返回图片的外网访问urlreturn stringBuilder.toString();}/*** 根据文件名称后缀,设置MIME类型,此处仅设置图片类型* @param filenameExtension 文件名称后缀* @return*/private String getContentType(String filenameExtension) {if (filenameExtension.equalsIgnoreCase(".bmp")) {return "image/bmp";}if (filenameExtension.equalsIgnoreCase(".gif")) {return "image/gif";}if (filenameExtension.equalsIgnoreCase(".jpeg") ||filenameExtension.equalsIgnoreCase(".jpg") ||filenameExtension.equalsIgnoreCase(".png")) {return "image/jpg";}return "image/jpg";}
}
  1. 在需要的地方调用即可,利用SpringMVC中的MultiPartFile来接受文件流。
@RestController
@RequestMapping("/admin/common")
@Slf4j
public class CommonController {@Autowiredprivate AliOssUtil aliOssUtil;//文件上传@PostMapping("/upload")public Result upload(MultipartFile file) throws IOException {String path = aliOssUtil.upload(file.getOriginalFilename(), file.getInputStream());log.info("图片上传之后的访问路径是{}", path);return Result.success(path);// 返回文件在网络中的url}
}

相关文章:

SpringBoot整合阿里云OSS,实现图片上传

在项目中&#xff0c;将图片等文件资源上传到阿里云的OSS&#xff0c;减少服务器压力。 项目中导入阿里云的SDK <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>…...

Dynaminc Programming相关

目录 3.1 最长回文子串&#xff08;中等&#xff09;&#xff1a;标志位 3.2 最大子数组和&#xff08;中等&#xff09;&#xff1a;动态规划 3.3 爬楼梯&#xff08;简单&#xff09;&#xff1a;动态规划 3.4 买卖股票的最佳时机&#xff08;简单&#xff09;&#xff1…...

使用 Elasticsearch 轻松进行中文文本分类

本文记录下使用 Elasticsearch 进行文本分类&#xff0c;当我第一次偶然发现 Elasticsearch 时&#xff0c;就被它的易用性、速度和配置选项所吸引。每次使用 Elasticsearch&#xff0c;我都能找到一种更为简单的方法来解决我一贯通过传统的自然语言处理 (NLP) 工具和技术来解决…...

MNN学习笔记(八):使用MNN推理Mediapipe模型

1.项目说明 最近需要用到一些mediapipe中的模型功能&#xff0c;于是尝试对mediapipe中的一些模型进行转换&#xff0c;并使用MNN进行推理&#xff1b;主要模型包括&#xff1a;图像分类、人脸检测及人脸关键点mesh、手掌检测及手势关键点、人体检测及人体关键点、图像嵌入特征…...

主力吸筹指标及其分析和使用说明

文章目录 主力吸筹指标指标代码分析使用说明使用配图主力吸筹指标 VAR1:=REF(LOW,1); VAR2:=SMA(MAX(LOW-VAR1,0),3,1)/SMA(ABS(LOW-VAR1),3,1)*100; VAR3:=EMA(VAR2,3); VAR4:=LLV(LOW,34); VAR5:=HHV(VAR3,34); VAR7:=EMA(IF(LOW<=VAR4,(VAR3+VAR5*2)/2,0),3); /*底线:0,…...

Python高光谱遥感数据处理与高光谱遥感机器学习方法教程

详情点击链接&#xff1a;Python高光谱遥感数据处理与高光谱遥感机器学习方法教程 第一&#xff1a;高光谱基础 一&#xff1a;高光谱遥感基本 01)高光谱遥感 02)光的波长 03)光谱分辨率 04)高光谱遥感的历史和发展 二&#xff1a;高光谱传感器与数据获取 01)高光谱遥感…...

【洛谷】P1678 烦恼的高考志愿

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1678 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 将每个学校的分数线用sort()升序排序&#xff0c;再二分查找每个学校的分数线&#xff0c;通过二分找到每个同学估分附近的分数线。 最后…...

开机自启CPU设置定频

sudo apt-get install expect sudo apt-get install cpufrequtils具体步骤如下&#xff1a; 安装 cpufrequtils 工具 ⚫ sudo apt-get install cpufrequtils ⚫ 需要联网下载修改配置文件 ⚫ sudo vi /etc/init.d/cpufrequtils ⚫ 将 GOVERNOR“ondemand” 改为&#xff1a; &g…...

嵌入式Linux开发实操(十二):PWM接口开发

# 前言 使用pwm实现LED点灯,可以说是嵌入式系统的一个基本案例。那么嵌入式linux系统下又如何实现pwm点led灯呢? # PWM在嵌入式linux下的操作指令 实际使用效果如下,可以通过shell指令将开发板对应的LED灯点亮。 点亮3个LED,则分别使用pwm1、pwm2和pwm3。 # PWM引脚的硬…...

消息中间件介绍

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如ActiveMQ、RabbitMQ&#xff0c;Kafka&#xff0c;还有阿里巴巴…...

[Unity] 基础的编程思想, 组件式开发

熟悉 C# 开发的朋友, 在刚进入 Unity 开发时, 不可避免的会有一些迷惑, 例如不清楚 Unity 自己的思想, 如何设计与架构一个应用程序之类的. 本篇文章简要的介绍一下 Unity 的基础编程思想. 独立 Unity 很少使用 C# 的标准库, 例如 C# 的网络, 事件驱动, 对象模型, 这些概念在 …...

SVN 项目管理笔记

SVN 项目管理笔记 主要是介绍 SVN 管理项目的常用操作&#xff0c;方便以后查阅&#xff01;&#xff01;&#xff01; 一、本地项目提交到SVN流程 在SVN仓库下创建和项目名同样的文件夹目录&#xff1b;选中本地项目文件&#xff0c;选择SVN->checkout,第一个是远程仓库项…...

Android获取手机已安装应用列表JAVA实现

最终效果: 设计 实现java代码: //获取包列表private List<String> getPkgList() {List<String> packages new ArrayList<String>();try {//使用命令行方式获取包列表Process p Runtime.getRuntime().exec("pm list packages");//取得命令行输出…...

【校招VIP】有一个比赛获奖项目和参与的开源小项目,秋招项目竞争力够不够?三个标准,自己都可以估算

有个24届的学生问我&#xff1a;现在没有实习&#xff0c;能不能参与大厂秋招&#xff1f;手里有两个项目&#xff0c;一个是比赛的获奖项目&#xff0c;一个是CSDN上博主做的开源小项目&#xff0c;这两个项目竞争力够不够&#xff1f; 其实项目这块&#xff0c;无非就是三个…...

量化开发学习入门-概念篇

1.网格交易法 网格交易法&#xff08;Grid Trading&#xff09;是一种基于价格波动和区间震荡的交易策略。它适用于市场处于横盘或震荡的情况下。 网格交易法的基本思想是在设定的价格区间内均匀地建立多个买入和卖出水平&#xff08;网格&#xff09;&#xff0c;并在价格上…...

【草稿】关于文本句子分割(中文+英文)以及向量处理

获取文本 主函数 Main # -*- encoding: utf-8 -*- # Author: SWHL # Contact: liekkaskono163.com from pathlib import Path from typing import Dict, List, Unionimport filetypefrom ..utils import logger from .image_loader import ImageLoader from .office_loader i…...

【瑞吉外卖】所遇问题及解决方法

太菜了实习之余瑞吉外卖补充一下基础知识&#xff08;&#xff0c;不然真啥也不会了。 请输入正确的手机号&#xff01; 是因为我测试了我的手机号&#xff0c;爆红&#xff0c;以为方法有错。但其实是前端代码检查手机号是否符合规范的语句有点&#xff08;&#xff09;啊啊…...

【Hugo入门】基础用法

检查Hugo是否安装 hugo version显示所有可用命令 hugo help显示指定命令的可用子命令&#xff0c;例如查询server的所有子命令 hugo server --help建立你的网站&#xff0c;cd进入你的项目根目录运行 hugo默认发布内容到自动创建的public文件夹。 覆盖hugo或hugo server的默…...

Java实现一个简单的图书管理系统(内有源码)

简介 哈喽哈喽大家好啊&#xff0c;之前作者也是讲了Java不少的知识点了&#xff0c;为了巩固之前的知识点再为了让我们深入Java面向对象这一基本特性&#xff0c;就让我们完成一个图书管理系统的小项目吧。 项目简介&#xff1a;通过管理员和普通用户的两种操作界面&#xff0…...

网络安全等级保护2.0

等保介绍 信息系统运维安全管理规定&#xff08;范文&#xff09;| 资料 等保测评是为了符合国家法律发挥的需求&#xff0c;而不是安全认证&#xff08;ISO&#xff09; 一般情况没有高危安全风险一般可以通过&#xff0c;但若发现高位安全风险则一票否决 二级两年一次 三…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...