Django rest 框架 - 将图像上传到 Azure 存储
Posted
技术标签:
【中文标题】Django rest 框架 - 将图像上传到 Azure 存储【英文标题】:Django rest framework - upload images to Azure storage 【发布时间】:2018-10-31 08:52:07 【问题描述】:django-storages 和 azure-storage 0.36(较新版本会出现大量错误)安装在虚拟环境中,上传似乎正在工作,因为 API 发送了一个带有应该正确链接到图像的响应。但是在 Azure 存储上没有创建任何内容。
只要使用默认的文件上传选项,文件上传就可以正常工作了。
是使用 django-storages 后端还是我应该直接使用 Azure python sdk?
settings.py
INSTALLED_APPS = (
....
'storages'
)
DEFAULT_FILE_STORAGE = 'storages.backends.azure_storage.AzureStorage'
AZURE_ACCOUNT_NAME = "myaccountname"
AZURE_ACCOUNT_KEY = "mykey"
AZURE_CONTAINER = "media"
MEDIA_ROOT = "http://mystorageaccount.blob.core.windows.net/"
MEDIA_URL = "http://mystorageaccount.blob.core.windows.net/media/"
models.py
image = models.ImageField(upload_to='images', null=True, blank=True)
有了这个设置,它似乎工作了
【问题讨论】:
【参考方案1】:根据 Django 的 official documentation,他们建议安装 Azure 存储 SDK:
Azure 存储 使用 Windows Azure 存储后端的 Django 自定义存储系统。
开始配置之前,您需要安装 Azure SDK for Python。
安装包:
pip install azure
添加到您的需求文件中:
pip freeze > requirements.txt
您应该使用 SDK。
【讨论】:
我发现here 存在与 azure-storages 相关的 django-storages 包的问题,因此对我来说至少工作版本是 azure==1.0.3 和 azure-storage ==0.20.3 天啊,您能否将其添加为答案,以便对社区有所帮助?谢谢,【参考方案2】:if os.environ.get('ENV') in ['Dev', 'Staging', 'Production']:
DEFAULT_FILE_STORAGE = 'backend.utils.custom_azure.AzureMediaStorage'
STATICFILES_STORAGE = 'backend.utils.custom_azure.AzureStaticStorage'
STATIC_LOCATION = "static"
MEDIA_LOCATION = "data"
AZURE_ACCOUNT_NAME = os.environ.get('AZURE_ACCOUNT_NAME', "")
AZURE_ACCOUNT_KEY = os.environ.get('AZURE_ACCOUNT_KEY', "")
AZURE_CUSTOM_DOMAIN = f'AZURE_ACCOUNT_NAME.blob.core.windows.net'
AZURE_BLOB_URL = f'https://AZURE_CUSTOM_DOMAIN'
AZURE_OVERWRITE_FILES = True
STATIC_ROOT = f'https://AZURE_CUSTOM_DOMAIN/STATIC_LOCATION/'
STATIC_URL = f'https://AZURE_CUSTOM_DOMAIN/STATIC_LOCATION/'
MEDIA_URL = f'https://AZURE_CUSTOM_DOMAIN/MEDIA_LOCATION/'
DATA_PATH = 'data'
else:
# local environment
SITE_URL = 'http://127.0.0.1:8050'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_ROOT = os.path.join(BASE_DIR, 'data/') # 'media/'
MEDIA_URL = '/data/' # '/media/'
DATA_PATH = os.path.join(BASE_DIR, MEDIA_ROOT)
【讨论】:
以上是关于Django rest 框架 - 将图像上传到 Azure 存储的主要内容,如果未能解决你的问题,请参考以下文章
即使在创建帖子期间使用 Postman 将文件上传到该字段后,Django Rest Framework 仍显示字段错误
python Django Rest Framework - 图像/文件上传测试