阿里云存储的一些简要概述

今天第一次接触阿里云存储,才开始使用感觉有点懵逼,直接跟本地存储搞混淆了,所以写一个文档记录一下阿里云存储的使用和什么是阿里云存储。

介绍

一句话简单介绍:

使用阿里云的存储服务将数据存储在云端,通过调用相关的key来获取数据的下载链接(二进制流上传和下载保存,不会损坏文件格式)

阿里云相关的知识点:

|-----------|------------------------------------------|
| 概念 | 说明 |
| Bucket | 存储桶(类似数据库) |
| Object | 对象(一个文件) |
| Endpoint | 访问地址 |
| AccessKey | 访问凭证 |
| Prefix | 逻辑路径(如 images/a.png)- 作为key去存储/访问存储的对象 |

python如何使用:

阿里云有提供给python的SDK包------oss2

复制代码
# 配置access_key_id、access_key_secret
export OSS_ACCESS_KEY_ID=你的AccessKeyId
export OSS_ACCESS_KEY_SECRET=你的AccessKeySecret

# 初始化
import oss2
import os

auth = oss2.Auth(
    os.getenv("OSS_ACCESS_KEY_ID"),
    os.getenv("OSS_ACCESS_KEY_SECRET")
)

bucket = oss2.Bucket(
    auth,
    endpoint="https://oss-cn-shenzhen.aliyuncs.com",
    bucket_name="hz-aiservice"
)

# 上传文件
content = b"hello oss" # 使用其他文件类也行

# 如果文件时其他类型文件,
# 此处需要将文件通过二进制数据读取到内存后进行上传
# 并且可以传入头部信息防止被识别成二进制流
# headers = {
#     'Content-Type': 'application/pdf',  # 如果是图片则是 image/jpeg 等
#     # 'x-oss-object-acl': 'public-read' # 如果需要设置单独的读写权限
# }

# with open("document.pdf", 'rb') as f:
#     bucket.put_object(
#         key="test/document.pdf",
#         data=f.read(),
#         headers=headers  # 传入头部信息
#     )

bucket.put_object(
    key="test/hello.txt", # 此处需要注意命名规范
    data=content
)

# 下载文件
bucket.get_object_to_file(
    key="documents/1/demo.pdf",
    filename="downloaded.pdf"
)

# 通过bucket的下载链接来进行处理 - 更加具有安全性,通常用于接口中
url = bucket.sign_url(
    method="GET",
    key="documents/1/demo.pdf",
    expires=3600  # 1 小时
)

print(url)

# 项目中相关封装
class OSSService:
    def __init__(self, bucket):
        self.bucket = bucket

    def upload_bytes(self, key: str, data: bytes):
        self.bucket.put_object(key, data)

    def generate_download_url(self, key: str, expires=3600):
        return self.bucket.sign_url("GET", key, expires)

    def delete(self, key: str):
        self.bucket.delete_object(key)

实际流程

简要流程概述:

  1. 在阿里云控制台开通OSS服务, 配置权限 ,获取相关密钥信息: AccessKey ID 、 AccessKey Secret 、 Endpoint
  2. 后端通过阿里云封装的SDK上传/读取在阿里云的文件,进行签名URL
  3. 阿里云返回访问地址
  4. 前端/后端系统request访问地址后进行相关操作

总体流程实现:

上传文件部分(分为两种):

    1. 前端上传
    • 用户前端上传文件,首先向后端请求阿里云上传文件链接
    • 后端向阿里云请求上传链接并返回上传链接给前端
    • 前端通过后端返回的上传链接来进行文件上传
    • 上传完成后向后端请求确认上传接口
    1. 后端上传
    • 前端通过调用后端接口将文件传输给后端
    • 后端接受到文件之后用阿里云SDK上传文件

注意点:

  1. 密钥等不要写死再代码里,可以通过环境变量或者配置config后读取的方式来进行读取
  2. bucket需要设置为私有,需要通过签名的方式去进行下载
  3. 阿里云存储的storage_path的命名方式:f"{操作名}/{uuid.uuid7()}_{file.filename}"
  4. 上传和下载链接都是有时间选项配置的,一般为3600s
  5. 如果涉及大文件传输最好使用前端来进行传输,并且大文件最好采用分片的方式传输防止传输失败
相关推荐
马克Markorg7 小时前
常见的向量数据库和具有向量数据库能力的数据库
数据库
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy10 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
数据知道11 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_124987075311 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha11 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_12 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance12 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
此生只爱蛋12 小时前
【Redis】主从复制
数据库·redis
马猴烧酒.12 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库