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

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

介绍

一句话简单介绍:

使用阿里云的存储服务将数据存储在云端,通过调用相关的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. 如果涉及大文件传输最好使用前端来进行传输,并且大文件最好采用分片的方式传输防止传输失败
相关推荐
小徐Chao努力2 小时前
【Langchain4j-Java AI开发】08-向量嵌入与向量数据库
java·数据库·人工智能
TG:@yunlaoda360 云老大3 小时前
华为云国际站代理商GSL主要有什么作用呢?
网络·数据库·华为云
TG:@yunlaoda360 云老大3 小时前
华为云国际站代理商GSL的流量用量与资费合规是如何实现的?
网络·数据库·华为云
冰冰菜的扣jio3 小时前
MySQL三大重要日志详解
数据库·mysql
l1t3 小时前
postgresql递归查询指定搜索顺序的方法
数据库·postgresql·dfs·递归·cte
java1234_小锋3 小时前
Redis的热Key问题如何解决?
数据库·redis·缓存
wang6021252183 小时前
FastAPI框架为什么在启动时建表
数据库
男孩李3 小时前
linux下如何执行postgres数据库的sql文件
数据库·sql·postgresql
zwjapple4 小时前
MySQL SQL 面试核心考点与注意事项总结
数据库·sql·mysql