【问题标题】:Django rest framework - upload images to Azure storageDjango rest 框架 - 将图像上传到 Azure 存储
【发布时间】: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)

有了这个设置,它似乎工作了

【问题讨论】:

    标签: django django-rest-framework azure-storage


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      相关资源
      最近更新 更多