阿里云OSS对象存储的使用和实现万能文件上传

文章目录

  • 阿里云OSS对象存储的使用和实现万能文件上传
  • 1、开通阿里云OSS对象存储服务(新用户可以免费试用三个月)
    • 1.1、点击免费试用并选择自己想要使用的服务
    • 1.2、咱们这里选择使用第一个存储服务,然后点击立即试用
  • 2、创建存储空间,获取bucketName和endpoint
    • 2.1、登录OSS[管理控制台](https://oss.console.aliyun.com/overview)。
    • 2.2、Bucket命名规则
    • 2.3、成功创建并进入Bucket
    • 2.4、进入Bucket后查看概览,记录下图信息
  • 3、在阿里云网站上的个人中心配置Accesskey,查询accessKeyId和accessKeySecret。
    • 3.1、进入AccssKey管理页面应该会出现下图提示,accessKeySecret为空,不用点击下载,直接确定即可
    • 3.2、点击创建AccessKey
    • 3.3、通过安全验证后可以看到生成的==accessKeyId和accessKeySecret==,大家下载csv文件或者复制下来,因为点击确定后==不再显示==accessKeySecret!!!
  • 4、OSS的使用
    • 4.1、导入依赖
    • 4.2、创建对应的工具类AliOssUtil类,此代码是固定代码,直接CV即可。
    • 4.3、在该工具类中有四个属性,通过上面的步骤已经获得了我们上传图片到OSS所需要的四个参数:==bucketName、endpoint、accessKeyId、accessKeySecret==。这些属性需要我们手动在application.properties中配置。
    • 4.5、配置相应model类
    • 4.6、将工具类配置到ioc容器中,便于后续的使用。
    • 4.7、测试:创建控制层(在本地项目基础上进行修改的大家可以去我的码云上查看项目完整结构)
      • https://gitee.com/fpl1116/wms-project

阿里云OSS对象存储的使用和实现万能文件上传

oss是对象存储服务(Object Storage Service)的缩写,是一种分布式存储服务,用于存储和访问大规模数据。它提供了可靠、安全、低成本的数据存储解决方案,可以通过网络随时随地访问存储的数据。oss常用于存储图片、视频、文档等非结构化数据。

1、开通阿里云OSS对象存储服务(新用户可以免费试用三个月)

https://www.aliyun.com/product/oss?spm=5176.8465980.unusable.ddetail.7df51450v1aNb1

1.1、点击免费试用并选择自己想要使用的服务

在这里插入图片描述

1.2、咱们这里选择使用第一个存储服务,然后点击立即试用

在这里插入图片描述

2、创建存储空间,获取bucketName和endpoint

存储空间(Bucket)是用于存储对象(Object)的容器。在上传任意类型的Object前,您需要先创建Bucket。

2.1、登录OSS管理控制台。

在这里插入图片描述

在左侧导航栏,单击Bucket列表,然后单击创建Bucket
在这里插入图片描述

创建Bucket面板,按如下说明配置必要参数。其他参数均可保持默认配置,也可以在Bucket创建完成后单独配置。然后单击确定
在这里插入图片描述

2.2、Bucket命名规则

同一阿里云账号在同一地域内创建的Bucket总数不能超过100个。Bucket创建后,其名称无法修改。Bucket命名规则如下:

  • Bucket名称在OSS范围内必须全局唯一。

  • 只能包括小写字母、数字和短划线(-)。

  • 必须以小写字母或者数字开头和结尾。

  • 长度为3~63个字符。

命名示例

Bucket名称的正确示例如下:

  • examplebucket1

  • test-bucket-2021

  • aliyun-oss-bucket

Bucket名称的错误示例以及错误的原因如下:

  • Examplebucket1(包含了大写字母)

  • test_bucket_2021(包含了下划线)

  • aliyun-oss-bucket-(结尾包含了短划线)

2.3、成功创建并进入Bucket

在这里插入图片描述
在这里插入图片描述

2.4、进入Bucket后查看概览,记录下图信息

在这里插入图片描述

3、在阿里云网站上的个人中心配置Accesskey,查询accessKeyId和accessKeySecret。

在这里插入图片描述

3.1、进入AccssKey管理页面应该会出现下图提示,accessKeySecret为空,不用点击下载,直接确定即可

在这里插入图片描述
点击继续使用AccessKey
在这里插入图片描述

3.2、点击创建AccessKey

在这里插入图片描述

3.3、通过安全验证后可以看到生成的accessKeyId和accessKeySecret,大家下载csv文件或者复制下来,因为点击确定后不再显示accessKeySecret!!!

在这里插入图片描述
在这里插入图片描述

4、OSS的使用

4.1、导入依赖

  <dependency>
       <groupId>com.aliyun.oss</groupId>
       <artifactId>aliyun-sdk-oss</artifactId>
       <version>3.10.2</version>
    </dependency>

4.2、创建对应的工具类AliOssUtil类,此代码是固定代码,直接CV即可。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;
 
@Data
@AllArgsConstructor
//固定代码,CV直接使用
public class AliOssUtil {
 
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
 
    /**
     * 文件上传
     *
     * @param bytes :传入的文件要转为byte[]
     * @param objectName :表示在oss中存储的文件名字。
     * @return
     */
    public String upload(byte[] bytes, String objectName) {
 
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
 
        try {
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
        } 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();
            }
        }
 
        //文件访问路径规则 https://BucketName.Endpoint/ObjectName
        StringBuilder stringBuilder = new StringBuilder("https://");
        stringBuilder
                .append(bucketName)
                .append(".")
                .append(endpoint)
                .append("/")
                .append(objectName);
 
        return stringBuilder.toString();
    }
}

4.3、在该工具类中有四个属性,通过上面的步骤已经获得了我们上传图片到OSS所需要的四个参数:bucketName、endpoint、accessKeyId、accessKeySecret。这些属性需要我们手动在application.properties中配置。

# 配置阿里云OSS(application.properties)
aliyun.oss.bucketName = fpl1116-project
aliyun.oss.endpoint = oss-cn-zhangjiakou.aliyuncs.com
aliyun.oss.accessKeyId = 
aliyun.oss.accessKeySecret = 

# yml版(application.yml)
#aliyun:
#  oss:
#    bucketName: fpl1116-project
#    endpoint: oss-cn-zhangjiakou.aliyuncs.com
#    accessKeyId: 
#    accessKeySecret: 

在这里插入图片描述

4.5、配置相应model类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * <p>Project: wms-project - OSSConfig</p>
 * <p>Powered by fpl1116 On 2024-02-28 23:26:54</p>
 * <p>描述:<p>
 *
 * @author penglei
 * @version 1.0
 * @since 1.8
 */

@Configuration
@ConfigurationProperties(prefix = "aliyun.oss")
@Data
public class AliOssProperties {

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;


}

4.6、将工具类配置到ioc容器中,便于后续的使用。

创建oss对应的配置类。

import com.fpl.model.AliOssProperties;
import com.fpl.utils.AliOssUtil;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OssConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil getAliOssUtil(AliOssProperties aliOssProperties) {
//        log.info("创建OssUtil");
        AliOssUtil aliOssUtil = new AliOssUtil(
                aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName()
        );
        return aliOssUtil;
    }
}

4.7、测试:创建控制层(在本地项目基础上进行修改的大家可以去我的码云上查看项目完整结构)

https://gitee.com/fpl1116/wms-project

@RestController
@RequestMapping("api/upload")
public class UploadController {
 
     @Autowired
    private AliOssUtil aliOssUtil;

    @PostMapping("/oss1")
    //万能上传
    public String upload1(@RequestBody UploadInfo uploadInfo){
        String name = uploadInfo.getName();
        String base64 = uploadInfo.getBase64();
        String[] base64Array = StrUtil.splitToArray(base64, "base64,");
        byte[] bytes = Base64.decode(base64Array[1]);
        name = PinyinUtil.getPinyin(name, "");
        String newName = System.currentTimeMillis() +"_"+name;
        FileUtil.writeBytes(bytes,newName);
        return aliOssUtil.upload1(bytes, newName);

    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP源防攻击IPSG(IP Source Guard)

IP源防攻击IPSG&#xff08;IP Source Guard&#xff09;是一种基于二层接口的源IP地址过滤技术&#xff0c;它能够防止恶意主机伪造合法主机的IP地址来仿冒合法主机&#xff0c;还能确保非授权主机不能通过自己指定IP地址的方式来访问网络或攻击网络。 2.1 IPSG基本原理 绑定…

进制转换md5绕过 [安洵杯 2019]easy_web1

打开题目 在查看url的时候得到了一串类似编码的东西&#xff0c;源码那里也是一堆base64&#xff0c;但是转换成图片就是网页上我们看见的那个表情包 ?imgTXpVek5UTTFNbVUzTURabE5qYz0&cmd 我们可以先试把前面的img那串解码了 解码的时候发现长度不够&#xff0c;那我们…

三、软考-系统架构设计师笔记-计算机系统基础知识

计算机系统概述 计算机系统是指用于数据管理的计算机硬件、软件及网络组成的系统。 它是按人的要求接收和存储信息&#xff0c;自动进行数据处理和计算&#xff0c;并输出结果信息的机器系统。 冯诺依曼体系计算机结构&#xff1a; 1、计算机硬件组成 冯诺依曼计算机结构将…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …

Centos7:自动化配置vim | suoders信任列表添加普通用户

Centos7&#xff1a;自动化配置vim | suoders信任列表添加普通用户 vim 配置原理sudoers系统可信任列表中添加普通用户自动化配置vim vim 配置原理 在目录/etc下有一个vimrc文件&#xff0c;该文件是系统中公共的vim配置文件&#xff0c;对所有用户都成立。  而在每个普通用户…

新品发布 | Ftrans CDS 跨域文件交换集中管控系统

1、背景 现如今&#xff0c;随着经济的快速发展&#xff0c;越来越多的企业架构呈现分散的状态&#xff0c;企业在异国、异地设立分支机构&#xff0c;在日常经营中&#xff0c;企业总部和分支机构间存在平行、垂直及互相交叉的管理模式和业务往来需求&#xff0c;因此&#x…

从0到1实现五子棋游戏!!

Hello&#xff0c;好久不见宝子们&#xff0c;今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下&#xff1a; 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍&#xff1a; 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…

微软广告和网络服务CEO承认OpenAI的Sora将加入Copilot,但需要一些时间

事情的起因是一名网友询问 Sora 是否会加入 Copilot&#xff0c;微软广告和网络服务CEO首席执行官——Mikhail Parakhin 回应说&#xff1a;“最终&#xff0c;但这需要时间。”毕竟投了几十个亿美金进去&#xff0c;不亏是金主爸爸。 图为Mikhail Parakhin Sora是OpenAI开发的…

Socket网络编程(二)——UDP快速入门

目录 UDP相关概念UDP是什么为什么不可靠UDP能做什么UDP包最大长度 UDP单播、广播、多播概念1. 单播、广播、多播模型图2. ip地址分类3. 子网掩码的作用&#xff1a;4. 广播地址5. 网段划分6. 变长子网掩码 UDP核心APIAPI-DatagramSocketDatagramSocket构造方法DatagramSocket常…

疑似某免杀测试样本被国外安全团队捕获

今天笔者发现国外MalwareHunterTeam捕获到一例特殊的样本&#xff0c;如下所示&#xff1a; 服务器的IP地址为:117.50.106.161&#xff0c;同时样本的PDB信息&#xff0c;如下所示&#xff1a; 样本的PDB信息&#xff1a;C:\Users\Xiaowu\source\repos\bypass-1\Release\bypass…

解决vscode内置视图npm脚本操作报权限问题

项目背景 当我们使用 vscode 运行NPM脚本时却爆红了&#xff0c;提示系统上禁止运行脚本。 解决思路 竟然提示权限不够&#xff0c;那么咱们就从系统权限出发&#xff0c;vscode右键以管理员身份运行 在集成终端中输入一下命令 # get-executionpolicy是PowerShell中的命令,用…

开源的 Python 数据分析库Pandas 简介

阅读本文之前请参阅-----如何系统的自学python Pandas 是一个开源的 Python 数据分析库&#xff0c;它提供了高性能、易用的数据结构和数据分析工具。Pandas 特别适合处理表格数据&#xff0c;例如时间序列数据、异构数据等。以下是对 Pandas 的简明扼要的介绍&#xff0c;包括…

【MATLAB】兔子机器人动力学模型解读(simulink中的simscape的各模块介绍)

1、动力学模型 Rectangular Joint 控制平面上&#xff08;x&#xff0c;y轴&#xff09;的移动&#xff0c;去掉以后&#xff0c;机器人在原地翻滚不移动 Rigid Transform 坐标转换&#xff0c;B站视频已收藏 去掉&#xff0c;机体与地面贴合 此处的作用是设定机体的初…

深入探究【观察者模式】:简单音乐会售票系统案例分析

文章目录 1.观察者模式概述基本概念&#xff1a;工作原理&#xff1a; 2.案例-音乐会抢票2.1.具体实现2.1.1.被观察者接口2.1.2.被观察者实现类2.1.3.定义观察者接口2.1.3.定义观察者实现类2.1.4.测试观察者 3.总结3.1.优点和局限性3.2.思考 1.观察者模式概述 观察者模式是一种…

动态规划(算法竞赛、蓝桥杯)--混合背包DP

1、B站视频链接&#xff1a;E14 背包DP 混合背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N1010,M10000; int a[M],b[M],c[M];//体积、价值、类型 int f[N];int main(){int n,m,v,w,s;cin>>n>>m;int num1;for(int i1;i&…

精准杜绝医疗设备漏费的智慧防线

19339904493&#xff08;康&#xff09; 医疗设备漏费管理系统&#xff0c;如同医疗设备的智慧守望者&#xff0c;时刻守护着患者的权益与医院的利益。它运用先进的人工智能算法&#xff0c;深度读取设备内部图像与项目信息&#xff0c;通过深度学习图像并分析患者的检查部位、…

如何保护服务器的安全

互联网的迅速发展&#xff0c;让很多企业都很重视网络技术的使用&#xff0c;但是网络的传播速度比较快&#xff0c;同时容易造成数据、隐私方面的泄露现在每个企业基本有自己的服务器。有几点需要注意&#xff0c;可以参考&#xff1a; 1.基础密码安全 最基本的安全就是密码安…

Docker数据卷-自定义镜像

一.数据卷 1.1数据卷的基本使用 数据卷是一个特殊的目录&#xff0c;用于在Docker容器中持久化和共享数据。 数据卷的主要特点包括&#xff1a; 数据持久性&#xff1a;数据卷允许您在容器的生命周期之外保持数据的持久性。即使容器被删除&#xff0c;数据卷中的数据依然存在&…

礼遇派兑|神工坊龙年豪礼大放送,千元惊喜等你来领

新年伊始 万象更新 转眼间 已全面复工复学啦&#xff01; 前方警告⚠️&#xff1a;“年后再说”已无退路 万千“子涵”在线求助 别担心&#xff01;神工坊替你解决&#xff01; 神工坊高性能工业仿真平台 以国家超级计算无锡中心 丰富的软件资源和海量的硬件资源为支撑…

接口测试实战--mock测试、日志模块

一、mock测试 在前后端分离项目中,当后端工程师还没有完成接口开发的时候,前端开发工程师利用Mock技术,自己用mock技术先调用一个虚拟的接口,模拟接口返回的数据,来完成前端页面的开发。 接口测试和前端开发有一个共同点,就是都需要用到后端工程师提供的接口。所以,当…