You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django配置上传文件至Azure时遇BlobPermissions导入错误求助

解决Django上传Azure时cannot import name 'BlobPermissions' from 'azure.storage.blob'错误

问题原因

这个错误源于django-storages与azure-storage-blob版本不兼容:

  • 新版azure-storage-blob(v12+)已移除BlobPermissions类,替换为BlobSasPermissions
  • 旧版django-storages仍在尝试导入已被移除的BlobPermissions

解决方案

方案一:升级django-storages到兼容版本

  1. 安装适配新版Azure SDK的django-storages:
pip install --upgrade django-storages[azure]
  1. 现有settings.py配置无需修改,新版可直接兼容:
# settings.py
AZURE_ACCOUNT_NAME = 'MY_AZURE_ACCOUNT_NAME'
AZURE_ACCOUNT_KEY = 'MY_AZURE_ACCOUNT_KEY'
AZURE_CONTAINER = 'MY_AZURE_CONTAINER'

DEFAULT_FILE_STORAGE = 'storages.backends.azure_storage.AzureStorage'

AZURE_CUSTOM_DOMAIN = f'{AZURE_ACCOUNT_NAME}.blob.core.windows.net'
MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{AZURE_CONTAINER}/'
MEDIA_ROOT = MEDIA_URL

方案二:降级azure-storage-blob到v11版本

若不想升级django-storages,可安装保留BlobPermissions的旧版Azure SDK:

pip install azure-storage-blob==11.0.0

优化文件上传代码

你当前的代码需要先存本地再读取,可改为内存中直接处理,避免本地文件操作:

# views.py
from django.core.files.base import ContentFile
import requests
from datetime import datetime

retrieved_image = requests.get(referrence)
image_timestamp = datetime.now().timestamp()
image_name = f"{image_timestamp}.jpg"
# 直接用ContentFile包装响应内容,跳过本地存储
django_file = ContentFile(retrieved_image.content, name=image_name)

# 后续可直接关联模型字段保存,示例:
# your_model_instance.image_field.save(image_name, django_file)

内容的提问来源于stack exchange,提问作者Mohan T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:05:06