阿里云OSS使用流程

news2024/11/25 10:52:29

 准备工作

无论怎么样,你需要准备一个阿里云账号,点击:注册阿里云

输入相关信息,然后注册成功以后,点击

image

image.gif

然后注册成功了,实名一下阿里云账号。打开实名入口,选择个人实名或者企业实名。

image

image.gif

如果你是个人用户,则建议你使用个人实名,如果你是企业用户,则建议你使用企业实名,这里要注意一下,个人实名的阿里云账号,在消费后,是无法索取企业发票的。

1.摘要


本篇博客对阿里云OSS的基本概念和使用进行总结,旨在快速上手该云存储产品,更为详细的内容可以参考官方文档,日后再进行补充。

2.概述


1)何为阿里云OSS?

阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的分布式云存储产品

2)为何使用云存储?

传统数据存储的主要方式
①将数据存储于服务器本机,由操作系统(文件系统)直接通过文件路径实现对数据的存储与访问
②将数据存储于自建的存储系统中,通过本地进程间的或网络进程间的接口实现对数据的存储与访问(相当于在操作系统之上增加了一层数据存储与管理的应用,将业务与数据管理解耦)
这里的数据更具体的指各种非结构化的数据,即各种类型的文件或资源(如视频、图像、文本等)

传统数据存储方式的主要不足
需要自建存储系统并处理各种细节(基本功能、数据组织、备份容灾、扩容、安全性、数据迁移等)

云存储及其优势
与传统方式中的自建存储系统一致,只是将数据存储系统搭建、管理的任务交由第三方云服务提供商处理,省时省力省成本,是大数据、云服务时代敏捷开发的利器

3)使用方式

Web控制台
命令行工具ossutil
十多种语言的SDK
RESTfule API
图形化工具ossbrowser
4)存储类型


5)功能介绍


3.基本概念


1)存储空间Bucket

用于存储对象的容器

配置信息
①地域Region:OSS数据中心所在的物理位置,指定后不能修改,不同Region对应的访问域名不同
②访问域名Endpoint:OSS对外服务的访问域名,内外网不同
③访问密钥AcessKey:AK,用户通过用户标识AccessKeyId和密钥AccessKeySecret对称加密的方式进行身份验证,可以由Bucket创建者和Bucket授权者创建
④所属资源组:为Bucket打不同的标签

每个用户可以拥有多个存储空间,每个存储空间内部是扁平的,存储空间内的对象数目不限

存储空间名在整个OSS范围内是全局、唯一、不可修改的

命名规范
①只能包含数字、小写字母和短划线-
②必须以数字或小写字母开头和结尾
③长度在3-63字符之间

2)对象Object

对象是OSS存储数据的基本单元,也称OSS文件

组成
①元信息Object Meta(如最后修改时间、大小等信息)
②用户数据Data
③文件名Key(也称ObjectKey、ObjectName,使用UTF8编码、长度在1-1023字符之间、不能以正反斜杠开头)

对象类型
①Normal:简单模式上传的Object,适合5G以内的文件,只能读、不能修改,再次上传同名文件会覆盖
②Multipart:通过分片上传的Object,适合大文件,只能读,不能修改,再次上传同名文件会覆盖
③Appendable:追加方式上传的Object,可以追加上传,适用于视频监控、视频直播等实时视频流场景
不同类型之间不能相互转换

4.使用示例


4.1服务购买与开通


访问阿里云官网 → 登录 → 选择:产品/存储/对象存储OSS → 折扣套餐 → 选择套餐类型、付费 → 在对象存储OSS访问页中点击服务开通(账户第一次使用)

4.2Web控制台


创建存储空间Bucket
进入到管理控制台 → 点击Bucket列表 → 创建Bucket(进行配置)

文件管理
①上传文件:当前目录/指定目录(路径不存在自动创建) → 指定ACL(继承、私有、公共读、公共写)
②下载文件
③文件共享:URL共享下载(将HTTP头中的Content-Disposition设为attachment);自行绑定域名实现URL预览

通过自有域名访问OSS资源

4.3命令行工具ossutil


下面示例以Windows10 64位操作系统为例子

下载并安装对应操作系统的ossutil命令行工具
配置ossutil
①首先,创建AcessKey密钥:进入账户控制台 → 从右上角头像位置,进入AccessKey管理页 → 创建AccessKey密钥,验证账户即可(该步骤属于阿里云的访问控制RAM范畴)

②进入安装目录,运行ossutil.bat
③键入ossutil config,指定配置文件位置,或回车将配置文件存储在默认位置(推荐)
④设置语言,CH/EN,默认为CH
⑤键入对应的endpooint(可在对应Bucket概览查看)、accessKeyID、accessKeysecret、stsToken(回车为空)
⑥键入ossutil进行验证,若出现命令行提示,则证明配置成功(最后还可将该目录添加到系统的环境变量中)


简单示例

# 下载图片
ossutil cp oss://{bucket_name}/{file_name} {local_path}
# e.g.
ossutil cp oss://lincat-blog/image/my_pic1.jpg C:\Users\Administrator\Desktop

显示下载成功或失败提示:


其余命令行操作参见官方文档

4.4SDK编程


SDK编程以Java为例,OSS对Java的支持要求JDK版本在1.7及以上

引入依赖
①JDK1.9以下的依赖

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

②JDK1.9以上还需要添加jaxb相关依赖(略)示例代码:读文件并保存在本地
/** 通过OSS对Java的支持读取文件 **/

/** 通过OSS对Java的支持读取文件 **/
public class SDKDemo {

    public static void main(String[] args) {
        // 外网ip
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // accessKeyID
        String accessKeyId = "";
        // accessKeySecret
        String accessKeySecret = "";
        /* OSSClient是OSS的Java客户端,用于管理存储空间和文件等OSS资源
        需要初始化一个OSSClient实例,并根据需要修改ClientConfiguration的默认配置项*/
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
        try {
            // Bucket名
            String bucketName = "lincat-blog";
            // 对象名
            String objectName = "image/my_pic1.jpg";
            // 写入本地文件的路径
            String localFilePath = "my_pic1.jpg";
            // 获取对象
            OSSObject ossObject = ossClient.getObject(bucketName,objectName);
            // 转为输入流
            InputStream inputStream = ossObject.getObjectContent();
            FileOutputStream fileOutputStream = new FileOutputStream(localFilePath);
            // 写入输出文件流
            if(inputStream != null){
                int read;
                byte[] bytes = new byte[2048];
                while ((read = inputStream.read(bytes)) != -1) {
                    fileOutputStream.write(bytes, 0, read);
                }
            }
            // 关闭流与OSS客户端
            inputStream.close();
            fileOutputStream.close();
            ossClient.shutdown();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}


4.5RESTful API


通过OSS的RESTful API对OSS进行操作,这里通过Java语言,编写下载对象的例子

查阅OSS下载对象的接口

GET /ObjectName HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Range: bytes=ByteRange(可选)

利用SpringBoot对RESTful请求的封装模板RestTemplate发起请求

<!-- 引入web starter以支持RestTemplate -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.7.2</version>
 </dependency>

编写代码(请求公共可读写的OSS对象则无需Authorization)

/* 通过OSS的RESTful API 下载图片 */
public class RestDemo {
    public static void main(String[] args) throws IOException {
        // Spring封装的RESTful请求模板类
        RestTemplate restTemplate = new RestTemplate();

        // Region端点
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // accessKeyID
        String accessKeyId = "";
        // accessKeySecret
        String accessKeySecret = "";
        // bucket名
        String bucketName = "lincat-blog";
        // 对象名
        String objectName = "image/my_pic1.jpg";
        // 写入本地文件的路径
        String localFilePath = "advanced/src/oss/my_pic1.jpg";
        // 构造Authorization参数
        Map<String,String> params = new HashMap<String, String>();
        String authorization = new StringBuilder().append("OSS ")
                .append(accessKeyId)
                .append(":")
                .append(accessKeySecret).toString();
        params.put("Authorization",authorization);
        // 构造URL
        String url = new StringBuilder().append("http://")
                .append(bucketName)
                .append(".")
                .append(endpoint)
                .append("/").append(objectName).toString();
        // 注意此处的返回值类型org.springframework.core.io.Resource
        Resource resource = restTemplate.getForObject(url, Resource.class,params);
        // 输入流
        InputStream inputStream = resource.getInputStream();
        // 输出文件流
        FileOutputStream fileOutputStream = new FileOutputStream(localFilePath);
        // 写入输出文件流
        if(inputStream != null){
            int read;
            byte[] bytes = new byte[2048];
            while ((read = inputStream.read(bytes)) != -1) {
                fileOutputStream.write(bytes, 0, read);
            }
        }
        // 关闭流
        inputStream.close();
        fileOutputStream.close();
    }
}


运行可实现OSS对象的下载


4.6图形化工具


5.其他功能


5.1签名工具
1)Header签名
2)PostObject Policy签名
3)URL签名

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

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

相关文章

Xinstall:专业的App下载量统计工具,让推广效果可衡量

在移动互联网时代&#xff0c;App的下载量是衡量一个应用受欢迎程度的重要指标。然而&#xff0c;很多开发者和广告主在推广App时&#xff0c;都面临着一个共同的问题&#xff1a;如何准确统计App的下载量&#xff1f;这不仅关系到推广效果的评估&#xff0c;还直接影响到广告R…

【Linux 学习】进程优先级和命令行参数!

1. 什么是优先级? 指定进程获取某种资源&#xff08;CPU&#xff09;的先后顺序&#xff1b; Linux 中优先级数字越小&#xff0c;优先级越高&#xff1b; 1.1 优先级和权限的区别&#xff1f; 权限 &#xff1a; 能不能做 优先级&#xff1a; 已经能了&#xff0c;但是获…

Linux初学(十七)防火墙

一、防火墙简介 1.1 防火墙的类别 安全产品 杀毒&#xff1a; 针对病毒&#xff0c;特征篡改系统中的文件杀毒软件针对处理病毒程序防火墙&#xff1a; 针对木马&#xff0c;特征系统窃取防火墙针对处理木马 防火墙分为两种 硬件防火墙软件防火墙 硬件防火墙 各个网络安全…

模型量化——NVIDIA——方案选择(PTQ、 partialPTQ、 QAT)

PTQ、 partialPTQ、 QAT 选择流程 PTQ、 partialPTQ、 QAT 咨询NVIDIA 官方后&#xff0c;他们的校正过程一致&#xff0c;支持的量化算子本质是一样的&#xff0c;那么如果你的算子不是如下几类&#xff0c;那么需要自己编写算子。参考TensorRT/tools/pytorch-quantization/py…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地…

码蹄集部分题目(第五弹;OJ赛2024年第10期)

&#x1f40b;&#x1f40b;&#x1f40b;竹鼠通讯&#xff08;钻石&#xff1b;分治思想&#xff1b;模板题&#xff1a;就算几何平面点对问题&#xff09; 时间限制&#xff1a;3秒 占用内存&#xff1a;128M &#x1f41f;题目描述 在真空中&#xff0c;一块无限平坦光滑…

基于SSM+Jsp+Mysql的高校毕业设计管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

【三十六】【算法分析与设计】综合练习(3),39. 组合总和,784. 字母大小写全排列,526. 优美的排列

目录 39. 组合总和 对每一个位置进行枚举 枚举每一个数出现的次数 784. 字母大小写全排列 526. 优美的排列 结尾 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不…

【信贷后台管理之(五)】

文章目录 目录结构一、面包屑组件封装二、退出登录接口联调三、申请列表的菜单路由3.1 路由创建&#xff0c;表格编写3.2 列表接口调用3.3 出生日期转变3.4 申请状态3.5 申请列表的操作3.5.1 编辑删除提交操作3.5.2 禁用状态3.5.3 操作接口3.5.4 搜索查询3.5.5 申请列表分页功能…

Leetcode面试经典150_Q14最长公共前缀

题目&#xff1a; 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。 思路A&#xff1a;横向/纵向扫描 Python&#xff1a; class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:s "…

NPDP含金量高吗?什么人适合学习NPDP?

省流版&#xff1a;NPDP含金量挺高的&#xff0c;做产品的建议去学习下~ 一、什么是NPDP&#xff1f; NPDP 是产品经理国际资格认证&#xff0c;美国产品开发与管理协会&#xff08;PDMA&#xff09;发起的&#xff0c;是目前国际公认的唯一的新产品开发专业认证&#xff0c;…

LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】

LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;Python 动态规划五部曲&#xff08;完全平方数就是物品&#xff08;可以无限件使用&#xff09;&#xff0c;凑个正整数n就是背包&#xff0c;问凑满这个背包最少有多少物品…

小明的衣服-蓝桥1228-优先队列

解法 用优先队列&#xff0c;思路参考哈夫曼树&#xff08;贪心&#xff09; 思路&#xff1a;很复杂&#xff0c;说结果 n件同色衣服要染成都不同色&#xff0c;求邮费最少&#xff1b; 倒过来想&#xff1a;n件不同颜色衣服&#xff0c;要染成同一种颜色&#xff0c;求邮费…

tensorflow.js 使用 opencv.js 将人脸特征点网格绘制与姿态估计线绘制结合起来,以获得更高的帧数

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图 文章目录 系列文章目录前言一、实现步…

Python高级

不定长参数 位置不定长参数&#xff0c;获取参数args会整合为一个元组 def info(*args):print(arg is, args)print(type(arg) is, type(args))info(1, 2, 3, 4, a, b)# 输出 # arg is (1, 2, 3, 4, a, b) # type(arg) is <class tuple> 关键字不定长参数&#xff0c;&…

JavaSE:图书管理系统

目录 一、前言 二、内容需求 三、类的设计 &#xff08;一&#xff09;图书类 1.Book 类 2.BookList 类 &#xff08;二&#xff09;操作类 1.添加图书AddOperation类 2.借阅图书BorrowOperation类 3.删除图书DelOperation类 4.显示图书ShowOperation类 5.退出系统Ex…

Python代码识别minist手写数字【附pdf】

一、概述 对于人类而言,要识别图片中的数字是一件很容易的事情,但是,如何让机器学会理解图片上的数字,这似乎并不容易。那么,能否找出一个函数(模型),通过输入相关的信息,最终得到期望的结果呢? 二、python代码实现中涉及的输入输出内容: 输入:mnist数据集每一个…

HarmonyOS 开发-手写绘制及保存图片

介绍 本示例使用drawing库的Pen和Path结合NodeContainer组件实现手写绘制功能&#xff0c;并通过image库的packToFile和packing接口将手写板的绘制内容保存为图片。 效果图预览 使用说明 在虚线区域手写绘制&#xff0c;点击撤销按钮撤销前一笔绘制&#xff0c;点击重置按钮…

动态路由-基于vue-admin-template

基于 vue-admin-template的动态路由 1. 拆分静态路由与动态路由 静态路由----所有人都可以访问—首页/登录/404 动态路由–有权限的人才可以访问—组织/角色/员工/权限 2. 根据用户权限添加动态路由 获取对应的权限标识(vuex中actions中把用户资料通过return 进行返回&…

代码随想录算法训练营DAY17|C++二叉树Part.4|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

文章目录 110.平衡二叉树思路伪代码CPP代码 257.二叉树的所有路径思路伪代码实现CPP代码 404.左叶子之和思路伪代码CPP代码 110.平衡二叉树 力扣题目链接 文章讲解&#xff1a;110.平衡二叉树 视频讲解&#xff1a;后序遍历求高度&#xff0c;高度判断是否平衡 | LeetCode&…