Skip to content

使用第三方对象存储

项目默认是本地存储,资源可使用NGINX直接访问

提供OSS存储方案,参考django-storages官方文档

1.阿里云oss存储配置

a.安装相关存储包

shell
pip install django-storages boto3

b.添加第三方应用

python
# server/settings/base.py
INSTALLED_APPS = [
    ...
    'storages', # 添加到这里
    *XADMIN_APPS,
    'common.apps.CommonConfig',  # 这个放到最后, django ready
]

c.修改存储默认配置

python
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            'access_key': "LTA*****fJdcR",
            'secret_key': "lAj*****6Zi",
            'endpoint_url': "http://xadmin-dev-oss.oss-cn-zhangjiakou.aliyuncs.com", # 使用https报错???
            'bucket_name': "xadmin-dev-oss",
            'custom_domain':'devcdn.dvcloud.xin/xadmin-dev-oss'  # cdn域名,加速文件下载分发
        },
    },
    'staticfiles': {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"
    }
}

2.MINIO存储配置

添加配置

yml
# config.yml

# Minio服务地址
MINIO_ENDPOINT_URL: "http://127.0.0.1:9000"
# Minio账号或KEY
MINIO_ACCESS_KEY: "USR"
# Minio密码或KEY
MINIO_SECRET_KEY: "PWD"
# Minio中桶名称,需要自己创建
MINIO_BUCKET_NAME: "xadmin"
# 同名文件是否允许覆盖
MINIO_FILE_OVERWRITE: false
# 是否使用Https,False就是使用Http
MINIO_USE_SSL: false
shell
pip install django-storages boto3 minio

添加配置

yml
# config.yml

# Minio服务地址
MINIO_ENDPOINT_URL: "http://127.0.0.1:9000"
# Minio账号或KEY
MINIO_ACCESS_KEY: "USR"
# Minio密码或KEY
MINIO_SECRET_KEY: "PWD"
# Minio中桶名称,需要自己创建
MINIO_BUCKET_NAME: "xadmin"
# 同名文件是否允许覆盖
MINIO_FILE_OVERWRITE: false
# 是否使用Https,False就是使用Http
MINIO_USE_SSL: false

b.添加第三方应用

python
# server/settings/base.py
INSTALLED_APPS = [
    ...
    'storages', # 添加到这里
    *XADMIN_APPS,
    'common.apps.CommonConfig',  # 这个放到最后, django ready
]

c.修改存储默认配置

python
### 静态文件也可一起放在OSS中,不过也可以放在本地
STORAGES = {
    'default': {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            'access_key': CONFIG.MINIO_ACCESS_KEY,
            'secret_key': CONFIG.MINIO_SECRET_KEY,
            'endpoint_url': CONFIG.MINIO_ENDPOINT_URL,
            'bucket_name': CONFIG.MINIO_BUCKET_NAME,
            'file_overwrite': CONFIG.MINIO_FILE_OVERWRITE,
            'use_ssl': CONFIG.MINIO_USE_SSL
        },
    },
    'staticfiles': {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"
    }
}

实际使用若需要删除时,删除对应文件,模型继承AutoCleanFileMixin

python
from django.db import models
from common.core.models import AutoCleanFileMixin
# AutoCleanFileMixin 得放前面,不然会被重写,不生效
class Material(AutoCleanFileMixin,DbAuditModel):
    file = models.FileField(verbose_name="文件", upload_to=upload_directory_path, null=True, blank=True)