当前位置:首页 » 《休闲阅读》 » 正文

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

14 人参与  2024年09月08日 09:22  分类 : 《休闲阅读》  评论

点击全文阅读


一、何为阿里云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库叫啥名字】 这个是【文件在本地的绝对路径】 写完这些之后,因为我们刚刚配置了【系统变量】,所以要【重启一下Idea】,然后再启动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容器里 */@Componentpublic 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("."));        //上传文件到 OSS        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);        ossClient.putObject(bucketName, fileName, inputStream);        //文件访问路径        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;        // 关闭ossClient        ossClient.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@RestControllerpublic class UpLoadController {    //注入依赖:AliOSSUtiles工具类    @Autowired    private 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://zhangshiyu.com/post/156953.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1