Django 自定义存储后端:S3 兼容 MinIO 的分片上传与签名URL
编写一个完全自定义的 File Storage 后端,支持 S3 分片上传、预签名 URL 和断点续传,且兼容 MinIO 私有部署。 · 难度:入门 · +10XP
Django 自定义存储后端:S3 兼容 MinIO 的分片上传与签名URL
django-storages 适合简单场景,但需要分片上传和自定义元数据时就捉襟见肘。本课程演示如何继承 Storage 类,重写 _open, _save, url 方法,底层使用 boto3 的 multipart upload 进行大文件上传。同时实现 generate_presigned_upload_url 用于前端直传,避免服务器内存瓶颈。最后通过 MinIO 的 Docker 容器进行本地测试。
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
import boto3
@deconstructible
class MinioStorage(Storage):
def _save(self, name, content):
client = boto3.client('s3', endpoint_url=self.endpoint)
client.upload_fileobj(content, self.bucket, name)
return name
def url(self, name):
return self.client.generate_presigned_url(
'get_object',
Params={'Bucket': self.bucket, 'Key': name},
ExpiresIn=3600
)