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

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

介绍

一句话简单介绍:

使用阿里云的存储服务将数据存储在云端,通过调用相关的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. 如果涉及大文件传输最好使用前端来进行传输,并且大文件最好采用分片的方式传输防止传输失败
相关推荐
茁壮成长的露露4 分钟前
MongoDB副本集
数据库·mongodb
想摆烂的不会研究的研究生7 分钟前
MySQL海量数据深分页优化
数据库·redis·后端·mysql·缓存
廋到被风吹走8 分钟前
【数据库】【Mysql】MySQL 索引优化深度解析:从原理到实战
数据库·mysql·adb
霖霖总总9 分钟前
[小技巧32]深入理解 MySQL中的双1参数:innodb_flush_log_at_trx_commit 与 sync_binlog
运维·数据库·mysql
枫叶丹419 分钟前
国产数据库新标杆:金仓以多模融合重构文档数据库未来
开发语言·数据库·重构
m0_7482523835 分钟前
Servlet 数据库访问
数据库·servlet
liux352838 分钟前
MySQL事务机制深度解析:从理论到实践(五)
数据库·mysql
二哈喇子!39 分钟前
MySQL和Navicat怎么连接
数据库·mysql·navicat
静听山水39 分钟前
StarRocks vs MySQL 全面深度对比
数据库
文亭湖畔程序猿39 分钟前
PVE 基础环境初始化与 Debian Cloud-Init 部署记录
网络·数据库·debian