使用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到兼容版本
- 安装适配新版Azure SDK的django-storages:
pip install --upgrade django-storages[azure]
- 现有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
相关产品推荐
相关产品推荐

