后端之路——阿里云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.rhkb.cn/news/368753.html

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

相关文章

【Linux】目录和文件的权限意义

现在我们知道了Linux系统内文件的三种身份&#xff08;拥有者、用户组与其他人&#xff09;&#xff0c;知道每种身份都有三种权限&#xff08;rwx&#xff09;&#xff0c;也知道能够使用chown、chgrp、chmod修改这些权限与属性&#xff0c;当然&#xff0c;利用IS-l去查看文件…

时空预测+特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比

时空预测特征分解&#xff01;高性能&#xff01;EMD-Transformer和Transformer多变量交通流量时空预测对比 目录 时空预测特征分解&#xff01;高性能&#xff01;EMD-Transformer和Transformer多变量交通流量时空预测对比效果一览基本介绍程序设计参考资料 效果一览 基本介绍…

目标检测入门:3.目标检测损失函数(IOU、GIOU、GIOU)

目录 一、IOU 二、GIOU 三、DIOU 四、DIOU_Loss实战 在前面两章里面训练模型时&#xff0c;损失函数都是选择L1Loss&#xff08;平均绝对值误差&#xff08;MAE&#xff09;&#xff09;损失函数&#xff0c;L1Loss损失函数公式如下: 由公式可知&#xff0c;L1Loss损失函数…

视频监控平台web客户端的免密查看视频页:在PC浏览器上如何调试手机上的前端网页(PC上的手机浏览器的开发者工具)

目录 一、手机上做前端页面开发调试 1、背景 2、视频监控平台AS-V1000的视频分享页 3、调试手机前端页面代码的条件 二、手机端的准备工作 1、手机准备 2、手机的开发者模式 3、PC和手机的连接 &#xff08;1&#xff09;进入调试模式 &#xff08;2&#xff09;选择…

Android Compose 十二:常用组件列表 上拉加载

列表 上拉加载 当前思路 判断 列表最后一个显示的条目 为 数据集合的长度-1 用来记录刷新状态 var refreshing by remember {mutableStateOf(false)}数据集合 val list remember{List(10){"条目》》${it}"}.toMutableStateList()}用来记录列表当前状态及状态变化…

Redis分布式集群部署

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一&#xff1a; 实验二&#xff1a; 实验三&#xff1a; 实验四&#xff1a; 添加节点 自动分配槽位 提升节点为master&#xff1a; 实验…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿&#xff0c;此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架&#xff0c;它现在是许多知名 CMS 的核心组件&#xff0c;例如Drupal、Joomla!、eZPlatform&#xff08;以前称为 eZPublish&#xff09;或Bolt。…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法&#xff0c;使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上&#xff0c;所有的vue模板都是语法层面的HTML&#xff0c;可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字&#xff08;也称为关键字&#xff09;是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

航空数据管控系统-①项目准备阶段:任务1:项目需求描述

任务描述 从用户的角度阐述项目的开发背景、使用范围及功能需求&#xff0c;从而指导学生独立完成项目的设计与开发。 任务指导 目录 标题 内容 备注 1. 项目概述 1.1 项目背景介绍 &#xff08;1&#xff09;说明产品是什么&#xff0c;什么用途 &#xff08;2&#xff…

【FFmpeg】avcodec_send_frame函数

目录 1.avcodec_send_frame1.1 将输入的frame存入内部buffer&#xff08;encode_send_frame_internal&#xff09;1.1.1 frame的引用函数&#xff08;av_frame_ref &#xff09;1.1.1.1 帧属性的拷贝&#xff08;frame_copy_props&#xff09;1.1.1.2 buffer的引用函数&#xf…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中&#xff08;不考虑缓存&#xff09; 任何程序在运行之前都的加入到内存。 eip->pc指针&#xff0c;指明当前指令在什么位置。 代码大概率是从上往下执行的&#xff0c;基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

git 还原被删除的分支

在多人项目开发中&#xff0c;有一次碰到忘记合并到master分支了&#xff0c;直接就把开发分支给删除了&#xff0c;现在记录下怎么还原被删除的分支 必须保证删除的分支之前已经被推送到了远程仓库 # 找出被删除分支的最后一个提交的哈希值 git reflog show# 找到提交哈希值…

【SSL 1823】消灭怪物(非传统BFS)

题目大意 小b现在玩一个极其无聊的游戏&#xff0c;它控制角色从基地出发&#xff0c;一路狂奔夺走了对方的水晶&#xff0c;可是正准备回城时&#xff0c;发现地图上已经生成了 n n n 个怪。 现在假设地图是二维平面&#xff0c;所有的怪和角色都认为是在这个二维平面的点上…

微信小程序的开发

前端&#xff1a;微信小程序开发的技术 后端&#xff1a;springboot的框架 一&#xff1a;微信小程序环境的搭建 1. 访问微信开发者官⽅⽹站的⼩程序开发⼯具下载⻚⾯。 2. 根据你的操作系统&#xff08;Windows、macOS或Linux&#xff09;选择合适的版本进⾏下载。 3. 下…

前端三件套开发模版——产品介绍页面

今天有空&#xff0c;使用前端三件套html、css、js制作了一个非常简单的产品制作页面&#xff0c;与大家分享&#xff0c;希望可以满足大家应急的需求。本页面可以对产品进行“抢购”、对产品进行介绍&#xff0c;同时可以安排一张产品的高清大图&#xff0c;我也加入了页面的背…

电气-伺服(4)CANopen

一、CAN Controller Area Network ,控制器局域网&#xff0c;80年的德国Bosch的一家公司研发可以测量仪器直接的实时数据交换而开发的一款串行通信协议。 CAN发展历史 二、CAN 的osi 模型 CAN特性&#xff1a; CAN 的数据帧 三、CANopen 什么是CANopen CANopen 的网络模型 …

力扣1685.有序数组中差绝对值之和

力扣1685.有序数组中差绝对值之和 记录左边之和 和 右边之和从左到右遍历每个元素 求res class Solution {public:vector<int> getSumAbsoluteDifferences(vector<int>& nums) {int n nums.size(),lsum 0,rsum accumulate(nums.begin(),nums.end(),0);ve…

MySQL8 快速导入数据指令load Data 最全详解

MySQL8 快速导入数据指令load Data 最全详解 修改mysql配置文件修改my.ini文件进入mysql,进入库"ceshi"查询你导入的数据表导入数据查询导入的数据 项目基础windows版本MySQL8 修改mysql配置文件 找到mysql的安装目录下的my.ini文件 C:\ProgramData\MySQL\MySQL Serv…

openEuler AArch64 架构 vCPU 热插拔技术内幕

OpenAtom openEuler&#xff08;简称"openEuler"&#xff09;社区引领技术浪潮&#xff0c;早在openEuler 20.09 创新版本就率先使能并对外开放了 AArch64 架构 vCPU 热插特性。时隔四年&#xff0c;openEuler 24.03 LTS 版本补充了 vCPU 热拔能力&#xff0c;vCPU 热…