后端之路——阿里云OSS云存储

一、何为阿里云OSS

全名叫“阿里云对象存储OSS”,就是云存储,前端发文件到服务器,服务器不用再存到本地磁盘,可以直接传给“阿里云OSS”,存在网上。

二、怎么用

大体逻辑:

细分的话就是:

1、准备工作:OSS开通

这一部分黑马程序员写的很详细,我就直接cv他的教程了

(1)打开《阿里云-计算,为了无法计算的价值》阿里云官网,申请阿里云账号并完成实名认证。

(2)开通OSS

         登录阿里云官网。 点击右上角的控制台。
 
  将鼠标移至产品,然后在输入框搜索 【对象存储 OSS】 ,找到并单击【对象存储 OSS】 ,打开 OSS 产品详情页面。
OSS 产品详情页中的单击立即开通。

(3)创建Bucket存储空间

开通服务后,在OSS产品详情页面单击管理控制台直接进入OSS管理控制台界面。
您也可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单
击左侧的对象存储 OSS菜单进入 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
新建 Bucket ,命名为 hmleadnews ,读写权限为 公共读 3. OSS 快速入门

(4)获取Bucket信息以及【Access密钥】

要获取这几个很重要的信息: Bucket名称Endpoint(地域节点)、【 AccessKeyId】、【 AccessKeySecret
然后在侧边栏的【Bucket列表】可以看到你创建的Bucket
就能看到我们要的第一个东西【 Bucket名称
点击你这个【Bucket】仓库,然后再点击【概览】
然后往下翻可以看到我们要的第二个东西:【 Endpoint(地域节点)
然后最后到右上角点击个人头像,选中【AccessKey管理】
就可以获得我们最后要的两个东西:【 AccessKeyId】、【 AccessKeySecret
拿到之后【保存起来】,不然的话就看不到了,下次再要,这个accessKey就作废了,然后重新手机号验证,获取一个新的【 AccessKeyId】和【 AccessKeySecret

2、在test配置一个上传样例代码试一下

那么接下来就可以在代码里测试一下能不能用了

首先我们还要在【pom.xml】文件里在配置好【阿里云OSS的依赖】

<!-- 阿里云OSS的依赖 -->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>

如果你是java9以下的版本就不用做下一步操作,如果是java9以上的,在下面再配置这个依赖

<!-- java9以上的版本还需要配置这个阿里云配置 -->
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

然后开始在【test】目录下的【java】的【测试类】文件夹里加一个Demo类

然后把这段代码直接复制过去:

(因为黑马程序员里的教程是N年前的,阿里云OSS更新了代码配置,所以直接用我下面这个别用黑马程序员的资料代码,我这是官方最新的)

package com.czm.tliaswebmanagement;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;public class Demo {public static void main(String[] args) throws Exception {/*** 基础配置:连接服务并验证个人身份*/// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称,例如examplebucket。String bucketName = "czm-goeasy-im";/*** 配置具体文件上传信息*/// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "1.png";// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。String filePath= "C:\\Users\\岑梓铭\\Desktop\\c182dd874f2e4c4baaf1806d54bf9cfc.png";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);try {// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传文件。PutObjectResult result = ossClient.putObject(putObjectRequest);           } catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}
}

然后别急着运行,我简单讲解一下你们要改的地方

(1)配【EndPoint节点】

首先在最上面的三句代码里,第一句是【配置你与OSS的Bucket仓库连接的网址】,专业点就是【EndPoint节点】

(2)配【AccessKeyId】和【AccessKeySecret

因为黑马程序员里的教程是N年前的,阿里云更新了OSS的配置,所以阿里云OSS新的代码里没有直接配【AccessKeyId】和【AccessKeySecret】的代码,取而代之的是用户直接在【系统变量】和【环境变量】里配置好【AccessKeyId】和【AccessKeySecret

.

在【环境变量加上两个变量(变量名不能自定义,只能是这两):

【OSS_ACCESS_KEY_ID】:【变量值】就是我们刚刚阿里云看的【AccessKeyId

【OSS_ACCESS_KEY_SECRET】:【变量值】就是我们刚刚阿里云看的【AccessKeySecret

再在【系统变量加上刚刚那两个变量(变量名不能自定义,只能是这两):

【OSS_ACCESS_KEY_ID】、【OSS_ACCESS_KEY_SECRET】

最后在【系统变量】的Path】里用“%变量%”的形式,把那两个变量加进去

(3)配【Bucket名】

(4)配置【文件在本地的绝对路径】、文件上传之后在【阿里云OSS的Bucket库叫啥名字】

这个是文件上传之后在【阿里云OSS的Bucket库叫啥名字】
这个是【文件在本地的绝对路径】
写完这些之后,因为我们刚刚配置了【系统变量】,所以我建议先【重启电脑】,然后再启动spring boot工程,哦这里还有一点:test的测试类可以不用运行整个spring boot工程,只允许这一个类就行
然后就能看到你上传的文件了,这个网址就是提供给前端访问图片的url

3、正式前后端利用阿里云OSS联调一下文件上传

文件上传这玩意因为其实没什么技术含量,而且代码又臭又长的,那么这里我们直接创建一个【工具类】,复制我的代码,然后要上传文件的地方就调用这个【工具类】帮我们上传即可

(1)首先在controller、service这些包的同级目录,创建一个【utils】包,创建一个【AliOSSUtils类】

(2)然后在这个类里直接复制粘贴下面的代码

package com.czm.tliaswebmanagement.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;/*** 阿里云 OSS 工具类* 因为不属于controller层,也不属于service层,所以用component注解来存放到IOC容器里*/
@Component
public class AliOSSUtils {private String endpoint = "你自己的Bucket的EndPoint节点";private String accessKeyId = "你自己的accessKeyId";private String accessKeySecret = "你自己的accessKeySecret";private String bucketName = "你自己的Bucket名字";/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

注意,这里写你们自己的配置,就跟上一个在test里的示例一样配置,只不过这里多了要让你自己配置【AccessKeyId】和【AccessKeySecret】这两项而已

然后简单讲一下这些代码都是干啥:

不用了解那么深,反正也不会记,以后都是直接用就行了

有一点,记得用【@Component】给它放到IOC容器,以方便别的地方直接用

(3)接下来创建一个上传文件的controller接口,调用AliOSSUtil工具类就行了

太简单了就不解释了,注释都有,只需要

1、在请求方法用MultipartFile接收文件参数   

2、调用AliOSSUtiles工具类上传文件、并返回上传完后的图片地址   

3、把地址返回给前端

package com.czm.tliaswebmanagement.controller;import com.czm.tliaswebmanagement.pojo.Result;
import com.czm.tliaswebmanagement.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@Slf4j
@RestController
public class UpLoadController {//注入依赖:AliOSSUtiles工具类@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result uplaod(MultipartFile image) throws IOException {log.info("上传过来的参数:{}", image.getOriginalFilename());//调用阿里云OSS工具类【AliOSSUtiles】进行文件上传String url = aliOSSUtils.upload(image);log.info("文件上传完成,url是:{}", url);return Result.success(url);}
}

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

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

相关文章

Rust: Fury高性能序列化库尝试

在序列化库中&#xff0c;传统的有Json,XML&#xff0c;性能好的有thrift&#xff0c;protobuf等。据说Fury官网的介绍&#xff0c;Fury性能要远远好于protobuf&#xff0c;且不象protobuf还需要定义IDL&#xff0c;非常轻便&#xff0c;随取随用。 今天来尝试一下。 一、carg…

gitlab每日备份以及restore

gitlab服务有非常简洁的每日备份命令&#xff0c; 从production的gitlab的每日备份中restore到backup环境也非常方便。 一、Production gitlab每日备份 1. Production gitlab环境上编写脚本 cat /root/gitlab_bak.shgitlab-rake gitlab:backup:create > /var/opt/gitl…

JavaSE (Java基础):面向对象(下)

8.7 多态 什么是多态&#xff1f; 即同一方法可以根据发送对象的不同而采用多种不同的方式。 一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多。在句话我是这样理解的&#xff1a; 在实例中使用方法都是根据他最开始将类实例化最左边的类型来定的&…

消息中间件ApacheKafka在windows简单安装

一.背景 之前公司需要API网关管理软件ApacheShenYu&#xff0c;我相信把调用的记录都存到一个数据库。他支持日志推送到kafka&#xff0c;所以&#xff0c;我准备尝试一下通过kafka接收调用的日志信息。第一步&#xff0c;当然是安装kafka了。 二.ApacheKafka的下载 打开下载…

【C++】 解决 C++ 语言报错:Memory Leak

文章目录 引言 内存泄漏&#xff08;Memory Leak&#xff09;是 C 编程中常见且严重的内存管理问题之一。当程序分配了内存而没有正确释放&#xff0c;导致内存无法被重新利用时&#xff0c;就会发生内存泄漏。这种错误会导致程序占用越来越多的内存&#xff0c;最终可能导致系…

关于人情世故的小讨论

大家好&#xff0c;我是阿赵。   最近国内篮球界内出了不少事情&#xff0c;让人对篮球这项运动产生了很多疑问。   去年的CUBA&#xff0c;拥有全国最好生源的清华大学居然输给了连985 、211都不是的广东工业大学。作为广工的毕业生&#xff0c;我知道广工的篮球一直都很强…

Unity PC和Android端的数据存储和读取

使用Resource&#xff1a; 提示&#xff1a;使用resouce打包后会被压缩进.resources文件中&#xff0c;意味着它是只读文件&#xff0c;且必须使用resouce.load加载&#xff1a; /// <summary>/// 全平台使用/// </summary>/// <typeparam name"T"&g…

论文学习——动态多目标优化的一种新的分位数引导的对偶预测策略

论文题目&#xff1a;A novel quantile-guided dual prediction strategies for dynamic multi-objective optimization 动态多目标优化的一种新的分位数引导的对偶预测策略&#xff08;Hao Sun a,b, Anran Cao a,b, Ziyu Hu a,b, Xiaxia Li a,b, Zhiwei Zhao c&#xff09;In…

“免费”的可视化大屏案例分享-智慧园区综合管理平台

一.智慧园区是什么&#xff1f; 智慧园区是一种融合了新一代信息与通信技术的先进园区发展理念。它通过迅捷信息采集、高速信息传输、高度集中计算、智能事务处理和无所不在的服务提供能力&#xff0c;实现了园区内及时、互动、整合的信息感知、传递和处理。这样的园区旨在提高…

自定义注解-手机号验证注解

注解 package com.XX.assess.annotation;import com.XX.assess.util.MobileValidator;import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*;/*** 手机号校验注解* @author super*/ @Retention(RetentionPolicy.RUNTIME) @Ta…

正确使用Pytorch Geometric打开Cora(Planetoid)数据集

文章目录 关于报错&#xff08;"Cannot connect to host"&#xff09;解决方法 关于报错&#xff08;“Cannot connect to host”&#xff09; 我们在使用PyG调用Planetoid数据集的时候&#xff0c;常会碰到如下报错&#xff1a; 解决方法就是手动下载这个数据集。…

在 AWS Lambda 中使用 Flask 应用

本文将介绍如何在 AWS Lambda 中创建和部署一个使用 Flask 框架的应用。 1. 创建 Lambda 函数 首先,在 AWS Lambda 控制台创建一个新的函数,命名为 ​​flask-app​​。 2. 准备 Flask 层 为了在 Lambda 中使用 Flask,我们需要创建一个包含 Flask 库的层。按照以下步骤操…

java中如何使用ffmpeg命令来实现视频编码转换

在Java中使用FFmpeg命令来进行视频编码转换&#xff0c;可以通过调用系统命令来执行FFmpeg命令。下面是一个使用FFmpeg进行视频转码的示例代码&#xff1a; import java.io.BufferedReader; import java.io.InputStreamReader;public class FFmpegVideoConverter {public stat…

前端播放RTSP视频流,使用FLV请求RTSP视频流播放(Vue项目,在Vue中使用插件flv.js请求RTSP视频流播放)

简述&#xff1a;在浏览器中请求 RTSP 视频流并进行播放时&#xff0c;直接使用原生的浏览器 API 是行不通的&#xff0c;因为它们不支持 RTSP 协议。为了解决这个问题&#xff0c;开发者通常会选择使用像 flv.js 这样的库&#xff0c;它专为在浏览器中播放 FLV 和其他流媒体格…

MySQL 代理层:ProxySQL

文章目录 说明安装部署1.1 yum 安装1.2 启停管理1.3 查询版本1.4 Admin 管理接口 入门体验功能介绍3.1 多层次配置系统 读写分离将实例接入到代理服务定义主机组之间的复制关系配置路由规则事务读的配置延迟阈值和请求转发 ProxySQL 核心表mysql_usersmysql_serversmysql_repli…

Java实现日志全链路追踪.精确到一次请求的全部流程

广大程序员在排除线上问题时,会经常遇见各种BUG.处理这些BUG的时候日志就格外的重要.只有完善的日志才能快速有效的定位问题.为了提高BUG处理效率.我决定在日志上面优化.实现每次请求有统一的id.通过id能获取当前接口的全链路流程走向. 实现效果如下: 一次查询即可找到所有关…

自定义一个背景图片的高度,随着容器高度的变化而变化,小于图片的高度时裁剪,大于时拉伸100%展示

1、通过js创建<image?>标签来获取背景图片的宽高比&#xff1b; 2、当元素的高度大于原有比例计算出来的高度时&#xff0c;背景图片的高度拉伸自适应100%&#xff0c;否则高度为auto&#xff0c;会自动被裁减 3、背景图片容器高度变化时&#xff0c;自动计算背景图片的…

Android network - NUD检测机制(Android 14)

Android network - NUD检测机制 1. 前言2. 源码分析2.1 ClientModeImpl2.2 IpClient2.3 IpReachabilityMonitor 1. 前言 在Android系统中&#xff0c;NUD&#xff08;Neighbor Unreachable Detection&#xff09;指的是网络中的邻居不可达检测机制&#xff0c;它用于检测设备是…

数据驱动测试实践:Postman 中使用数据文件的指南

Postman 是一个强大的 API 开发和测试工具&#xff0c;它支持数据驱动测试&#xff0c;允许测试者使用外部数据文件来驱动测试&#xff0c;实现测试用例的参数化。数据驱动测试可以显著提高测试效率&#xff0c;减少重复工作&#xff0c;并允许测试用例覆盖更广泛的输入场景。本…

一文了解常见DNS问题

当企业的DNS出现故障时&#xff0c;为不影响企业的正常运行&#xff0c;团队需要能够快速确定问题的性质和范围。那么有哪些常见的DNS问题呢&#xff1f; 域名解析失败&#xff1a; 当您输入一个域名&#xff0c;但无法获取到与之对应的IP地址&#xff0c;导致无法访问相应的网…