SpringCloud-Alibaba之OSS对象存储服务

阿里云的 OSS 服务进行云端的文件存储
用户认证需要上传图片、首页轮播需要上传图片,OSS分布式文件服务系统可以提供服务。

一、依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>

二、在配置文件中配置 OSS 服务对应的 accessKey、secretKey 和 endpoint

alibaba.cloud.access-key=your-ak
alibaba.cloud.secret-key=your-sk
alibaba.cloud.oss.endpoint=***

阿里云 accessKey、secretKey 为例,获取方式如下

①、在阿里云控制台界面,单击右上角头像,选择 accesskeys,或者直接登录用户信息管理界面:
在这里插入图片描述
②、获取 accessKey、secretKey:
在这里插入图片描述
如果使用了阿里云 STS服务 进行短期访问权限管理,则除了 accessKey、secretKey、endpoint 以外,还需配置 securityToken

③、创建Bucket

在这里插入图片描述
进入Bucket,上传文件,可以查看上传文件的详情(URL用来访问该文件)
在这里插入图片描述

三、注入OSSClient并进行文件上传下载等操作,大量文件对象操作的场景。

@Service
public class YourService{@Autowiredprivate OSSClient ossClient;public void saveFile(){//下载文件到本地ossClient.getObject(new GetObejctRequest(bucketName,objectName),new File("pathOfYourLocalFile"));}
}

如果是仅仅读取文件对象内容,OSS Starter也支持以Resource方式读取文件
①、在应用的 /src/main/resources/application.properties 中添加基本配置信息和 OSS 配置

spring.application.name=oss-example
server.port=18084
alibaba.cloud.access-key=your-ak
alibaba.cloud.secret-key=your-sk
alibaba.cloud.oss.endpoint=***

②、通过IDE直接启动或者编译打包后启动应用

  • IDE直接启动:找到主类 OSSApplication,执行 main 方法启动应用
  • 打包编译后启动,执行 mvn clean package 将工程编译打包;执行 java -jar oss-example.jar启动应用
    应用启动后会自动在 OSS 上创建一个名为 aliyun-spring-boot-test 的 Bucke
@Value("oss://aliyun-spring-boot/oss-test")
private Resource file;//文件内容读取
StreamUtils.copyToString(file.getInputStream(),Charset.forName(CharEncoding.UTF_8));

上传或下载文件

#使用 curl 调用上传接口 upload。该接口会上传 classpath 下的的 oss-test.json 文件。文件内容是一段 json:
curl http://localhost:18084/upload#使用 curl 调用下载接口 download。该接口会下载刚才用 upload 接口上传的 oss-test.json 文件,并打印文件内容到结果中:
curl http://localhost:18084/download

在OSS上验证结果

登陆OSS控制台,可以看到左侧 Bucket 列表新增一个名字为aliyun-spring-boot-test的 Bucket。
在这里插入图片描述
单击aliyun-spring-boot-test Bucket,选择 文件管理 页签,发现上传的 oss-test 文件。上传的 objectName 为oss-test.json。目录和文件以’/'符号分割。
在这里插入图片描述

===============================================

实战操作

一、导入依赖

<!--阿里云OSS依赖-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId>
</dependency><!--日期工具栏依赖-->
<dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId>
</dependency>

配置文件application.properties

server.port=8205
spring.application.name=service-ossspring.jackson.data-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8spring.redis.host=192.168.44.165
spring.redis.port=6379
spring.redis.database=0
spring.redis.timeout=1800000
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1#最大阻塞等待时间(附属表示没限制)
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848aliyun.oss.accessKeyId=
aliyun.oss.secret=
@SpringBootApplication(exclude=DataSourceAutoConfiguration.class)//无需加载数据库
@EnableDiscoveryClient
@ComponentScan(basePackages={"com.michael"})
public class ServiceOssApplication{public static void main(String[] args){SpringApplication.run(ServiceOssApplication.class,args);}
}

二、网关模块gateway中进行对上传oss模块进行配置

spring.cloud.gateway.routes[4].id=service-oss
spring.cloud.gateway.routes[4].uri=lb://service-oss
spring.cloud.gateway.routes[4].predicates=Path=/*/oss/**

三、文件流的方式上传

Controller

@RestController
@RequestMapping("/api/oss/file")
public class FileApiController{@Autowiredprivate FileService fileService;//将本地文件上传到阿里云@PostMapping("fileUpload")public Result fileUpLoad(MultipartFile file){//SpringMVC中的,可以得到要上传的内容//返回上传后的路径String url = fileService.upload(file);return Result.ok(url);}
}

Service

public interface FileService{String upload(MultipartFile file);
}
@Service
public class FileServiceImpl implements FileService{@Overridepublic String upload(MultipartFile file){//以下变量可以设置到配置文件中,然后通过工具类读取String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";String accessKeyId = "";String accessKeySecret = "";String bucket = "";//创建OSSClient实例OSS occClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);//上传文件流try{InputStream inputStream = file.getInputStream();//从Controller中获取用户上传的文件流String fileName = file.getOriginalFilename();//获取文件名称(包括路径)/**由于同名原因会导致文件上传的覆盖问题,后上传的覆盖前上传的*///采用uuid生成唯一值,添加到文件名称里(并且将里面的-用空串表示)String uuid = UUID.randomUUID().toString().replaceAll("-","");fileName = uuid+fileName;//按照日期创建文件夹,上传到创建文件夹的里面(joda-time日期工具依赖)String timeUrl = new DateTime().toString("yyyy/MM/dd");fileName = timeUrl + "/" + fileName;ossClient.putObject(bucket,fileName,inputStream);//关闭OSSClientossClient.shutdown();//上传之后的路径,可以从阿里云工作台的文件详情获取String url = "https://"+bucketName+"."+endpoint+"/"+fileName;return url;}catch(IOException e){e.printStackTrace();}}
}

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

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

相关文章

idea文件比对

idea文件比对 1.项目内的文件比对2.项目间的文件比对3. 剪切板对比4. 版本历史(不同分支和不同commit)对比 1.项目内的文件比对 在项目中选择好需要比对的文件(类)&#xff0c;然后选择Compare Files Mac下的快捷键是Commandd&#xff0c; 这样的比对像是git冲突解决一样 …

4.1 构建onnx结构模型-Reshape

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以reshape 结点进行分析 方式 方法一:pytorch --> onnx 固定shape import torchcla…

Java21新特性

一、Java21新特性 1、字符串模版 字符串模版可以让开发者更简洁的进行字符串拼接&#xff08;例如拼接sql&#xff0c;xml&#xff0c;json等&#xff09;。该特性并不是为字符串拼接运算符提供的语法&#xff0c;也并非为了替换StringBuffer和StringBuilder。 利用STR模版进…

【Linux】多路IO复用技术③——epoll详解如何使用epoll模型实现简易的一对多服务器(附图解与代码实现)

在正式阅读本篇博客之前&#xff0c;建议大家先按顺序把下面这两篇博客看一下&#xff0c;否则直接来看这篇博客的话估计很难搞懂 多路IO复用技术①——select详解&如何使用select模型在本地主机实现简易的一对多服务器http://t.csdnimg.cn/BiBib多路IO复用技术②——poll…

k8s:二进制搭建 Kubernetes v1.20

目录 1 操作系统初始化配置 2 部署 etcd 集群 2.1 准备签发证书环境 2.2 生成Etcd证书 3 部署 docker引擎 4 部署 Master 组件 5 部署 Worker Node 组件 k8s集群master01&#xff1a;192.168.30.105 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集…

《进化优化》第6章 进化策略

文章目录 6.1 &#xff08;11) 进化策略6.2 1/5规则&#xff1a;推导走廊问题 6.3 μ1进化策略6.4 μλ和&#xff08;μ,λ&#xff09;进化策略6.5 自身自适应进化策略协方差阵自适应CMA 6.1 &#xff08;11) 进化策略 假设f(x)是随机向量x的函数,我们想要最大化适应度f(x).…

2023年辽宁省数学建模竞赛A题铁路车站的安全标线

2023年辽宁省数学建模竞赛 A题 铁路车站的安全标线 原题再现&#xff1a; 在火车站或地铁站台上&#xff0c;离站台边缘 1 米左右的地方都画有一条黄线(或白线)&#xff0c;这是为什么呢?   这条线称为安全线(业内称之为安全标线)&#xff0c;人们在候车时必须站在安全线以…

【移远QuecPython】EC800M物联网开发板调用网络API(使用SIM卡联网并调用高德地图API的定位坐标转换)

【移远QuecPython】EC800M物联网开发板调用网络API&#xff08;使用SIM卡联网并调用高德地图API的定位坐标转换&#xff09; 高德API使用方法&#xff1a; 文章目录 API相关配置SIM卡联网网络操作API调用 高德地图API产品介绍适用场景使用限制使用说明坐标转换 附录&#xff…

第12章_MySQL数据类型精讲

文章目录 1 MySQL中的数据类型2 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4 如何选择演示代码 3 浮点类型3.1 类型介绍 本章的内容测试建议使用 MySQL5.7进行测试。3.2 数据精度说明3.3 精度误差说明 4 定点数类型4.1 类型介绍4.2 …

哈希表----数据结构

引入 如果你是一个队伍的队长&#xff0c;现在有 24 个队员&#xff0c;需要将他们分成 6 组&#xff0c;你会怎么分&#xff1f;其实有一种方法是让所有人排成一排&#xff0c;然后从队头开始报数&#xff0c;报的数字就是编号。当所有人都报完数后&#xff0c;这 24 人也被分…

D-Link账号密码泄露

构造payload&#xff1a; /getcfg.php SERVICESDEVICE.ACCOUNT&attackture%0D%0AAUTHORIZED_GROUP%3D1漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技…

IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

Docker官网 Docker官网&#xff1a;https://www.docker.com/ Docker Hub官网&#xff1a;http://hub.docker.com/ 什么是Docker Docker 是一个开源的容器引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编…

ELK搭建以及使用教程(多pipiline)

1、环境准备 服务器&#xff1a;Centos7 Jdk版本&#xff1a;1.8 Es版本&#xff1a;7.12.1 kibana版本&#xff1a;7.12.1 logstash版本:7.12.1 IP地址安装软件192.168.50.211Es&#xff0c;Kibana&#xff0c;logstash 2、安装docker 安装步骤参考&#xff1a;https:…

Springboot cloud概念和Nacos

Spring Boot Cloud 是一组基于 Spring Boot 开发框架的云计算组件和工具&#xff0c;旨在简化构建云原生应用程序的过程。Spring Boot Cloud 提供了许多云原生应用程序所需的基础设施&#xff0c;例如服务发现、负载均衡、配置管理等。Spring Boot Cloud 包括以下组件&#xff…

JavaScript 数组的 reduce 方法怎么用?用 5 个实际应用例子教会你

reduce 函数介绍 在 JavaScript 中&#xff0c;reduce() 是数组的一个高阶函数&#xff0c;作用是把数组中的元素逐个迭代处理&#xff0c;最终输出为一个处理结果。 reduce() 的语法如下&#xff1a; array.reduce(callback, initialValue); 这个函数接受两个参数&#xf…

在Node.js中,什么是中间件(middleware)?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【音视频 | opus】opus编解码库(opus-1.4)详细介绍以及使用——附带解码示例代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Three.js之PBR材质与环境贴图

参考资料 PBR材质简介…三维软件导出PBR材质属性 知识点 注&#xff1a;基于Three.jsv0.155.0 PBR材质简介PBR材质金属度和粗糙度&#xff1a;metalness、roughness环境贴图.envMap(金属效果)&#xff1a;CubeTextureLoader、envMapIntensityMeshPhysicalMaterial清漆层&am…

【已验证】解决PHP连接SQL Server时中文乱码问题23.11.04

测试环境 --php8.2 --apache2.4 --sqlserver2022 一.PHP连接SQLSERVER中文乱码-【问题分析】编码问题 1、SQL语句中有中文会导致执行失败&#xff1b; php连接sqlsever&#xff0c;输入中文&#xff0c;然后查询sqlserver中对应的数据&#xff0c;由于提交中文是UTF-8&…

第G7周:Semi-Supervised GAN 理论与实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营-第G7周&#xff1a;Semi-Supervised GAN 理论与实战&#xff08;训练营内部成员可读&#xff09; &#x1f356; 原作者&#xff1a;K同学啊|接…