# django-storages 配置使用 S3 Provider 支持 Aliyun OSS 使用

- Link: https://www.ixiqin.com/2025/10/02/django-storage-configuration-usage-s3-provider/
- Published: 2025-10-02T20:13:09+08:00
- Author: 白宦成

文章目录

 [Toggle](https://www.ixiqin.com/2025/10/02/django-storage-configuration-usage-s3-provider/#)

 * [安装](https://www.ixiqin.com/2025/10/02/django-storage-configuration-usage-s3-provider/#%e5%ae%89%e8%a3%85)
 * [配置](https://www.ixiqin.com/2025/10/02/django-storage-configuration-usage-s3-provider/#%e9%85%8d%e7%bd%ae)
 * [测试代码](https://www.ixiqin.com/2025/10/02/django-storage-configuration-usage-s3-provider/#%e6%b5%8b%e8%af%95%e4%bb%a3%e7%a0%81)

阿里云 OSS 提供了 [S3 的兼容](https://help.aliyun.com/zh/oss/developer-reference/compatibility-with-amazon-s3?spm=a2c4g.11186623.0.i1)，
所以如果你在 Django 应用当中，希望使用 OSS 作为文件存储的话，可以参考下方的说明，
来使用。

## 安装

首先，你需要执行如下命令安装 django-storages 的 S3 兼容

    ```shcb-line-numbers
    # uv
    uv add django-storages[s3]
    # pip
    pip install django-storages[s3]
    Code language: CSS (css)
    ```

## 配置

接下来，就是在你的项目文件夹中的 `settings.py` 中添加如下配置

    ```php
    AWS_S3_ACCESS_KEY_ID = env("AWS_S3_ACCESS_KEY_ID") # 你在阿里云拿到的 ACCESS_KEY
    AWS_S3_SECRET_ACCESS_KEY = env("AWS_S3_SECRET_ACCESS_KEY") # 你在阿里云拿到的 Secret Key
    AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME")# 你在阿里云拿到的 Bucket Name
    AWS_LOCATION = env("AWS_LOCATION") # 你的文件上传路径，比如  uploads/，你的所有文件都会上传到这个路径下
    AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME") # 你的 OSS 的可用区，比如 oss-cn-beijing
    AWS_S3_CUSTOM_DOMAIN = env("AWS_S3_CUSTOM_DOMAIN") # 你自己的自定义域名，以便于后续访问的时候使用。如果不知道的话，可以填 bucket 的默认域名。
    AWS_S3_ENDPOINT_URL = env("AWS_S3_ENDPOINT_URL") #  你的阿里云 Endpoint URL，比如 https://oss-cn-beijing.aliyuncs.com

    AWS_S3_ADDRESSING_STYLE = "virtual" # 阿里云只支持二级域名的形式
    AWS_S3_SIGNATURE_VERSION = "s3" # 阿里云只支持 v2 版的签名逻辑

    # 配置默认使用 S3 Storage，即使用 OSS 的 URL
    STORAGES = {
        "default": {
            "BACKEND": "storages.backends.s3.S3Storage", # 使用 S3  Storage
        },
    }

    Code language: PHP (php)
    ```

参考上方的配置，添加配置项后，保存，并重启服务器，即可在代码中进行测试。

## 测试代码

你可以执行 `python manage.py shell` 并执行如下代码，如果无报错，且可以在 OSS 控制台
看到文件，则说明你的配置成功了。

    ```php
    from django.core.files.storage import default_storage
    from django.core.files.base import ContentFile
    content = ContentFile(b"Hello World!")
    path = default_storage.save('test_file2.txt', content)
    print(f"文件保存路径: {path}")
    # 测试文件读取
    if default_storage.exists(path):
        with default_storage.open(path, 'r') as f:
            content = f.read()
            print(f"文件内容: {content}")
    # 测试文件URL生成
    url = default_storage.url(path)
    print(f"文件URL: {url}")
    # 测试文件删除
    default_storage.delete(path)
    print(f"文件是否存在: {default_storage.exists(path)}")

    Code language: PHP (php)
    ```
