【问题标题】:How to use Google Drive to save media files for a Django app that is deployed in Heroku?如何使用 Google Drive 为部署在 Heroku 中的 Django 应用程序保存媒体文件?
【发布时间】:2020-04-02 21:36:54
【问题描述】:

是否可以使用 Google Drive 来保存来自 Django 应用程序的所有媒体文件(用户将上传的图像文件)?这个应用程序将部署在 Heroku(免费)中。我也知道 Amazon S3,但我想避免它,因为它在 12 个月后不是免费的。我注意到在 Heroku 中部署应用程序后,静态图像加载正常(使用白噪声),但使用 ImageField 从模型上传的图像没有加载。我对 Google API 甚至 Heroku 没有任何经验,我找不到太多关于这种集成是否可行的信息。如果是的话,如果我能获得更多关于如何去做的细节,那就太好了。我目前正在使用最新版本的 Django (V3.0) 以及 Python 3.7.5(64 位)。

编辑:

以下是我为尝试使用 Google Drive 通过 Heroku 托管媒体文件所做的更改。我使用了django-googledrive-storage,如下所示。但是当我设置 DEBUG = False 并运行代码时,我没有收到任何错误,但我没有看到任何文件被上传或从谷歌驱动器访问。

Settings.py

# Application definition
INSTALLED_APPS = [
    # Default Apps
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # User Apps
    'users.apps.UsersConfig',
    'contacts.apps.ContactsConfig',
    'crispy_forms',  # For rendering forms
    'gdstorage'  # To host static and media files for Heroku
]

# Google drive storage settings
# I have added an environment variable with the same name and provided the full path
# of the JSON file where it is saved, like this - D:\secret_key.json
GOOGLE_DRIVE_STORAGE_JSON_KEY_FILE = os.environ.get('GOOGLE_DRIVE_STORAGE_JSON_KEY_FILE')

models.py

from gdstorage.storage import GoogleDriveStorage

# Define Google Drive Storage
gd_storage = GoogleDriveStorage()

class CustomUser(AbstractBaseUser):
    .
    .
    image = models.ImageField(upload_to='users', default='default.png', blank=True, storage=gd_storage)
    .
    .

【问题讨论】:

    标签: django heroku google-drive-api


    【解决方案1】:

    Django 使用 storage backend 抽象来进行静态和媒体存储。请参阅STATICFILES_STORAGEDEFAULT_FILE_STORAGE 两个设置。

    虽然django-storages 通常涵盖大多数使用的云提供商,但不支持谷歌驱动器。

    但是一些谷歌搜索给了我this library here 这应该可以解决你的问题。

    【讨论】:

    • 感谢您的回复。让我探索一下这个图书馆。如果它有效,我一定会回来接受这个答案。我不是专业的编码员。所以请给我一些时间。 :-)..
    • 我按照文档中列出的所有步骤进行操作。创建了一个服务帐户来获取密钥 JSON 文件。当我设置 DEBUG=False 时,一切正常。但我没有看到任何文件被上传或从谷歌驱动器访问。不确定我是否遗漏了什么.. :-(
    • 您能否使用您用于通过服务帐户上传文件的代码更新您的问题?
    • @jescanellas,我刚刚添加了与 django-googledrive-storage 库有关的代码。我不确定我在环境变量中使用的 JSON 文件路径设置是否正确,因为我已将文件的完整路径指定为变量,因为我不知道如何传递 JSON 内容本身。
    • 我刚刚检查了os.environ.get('GOOGLE_DRIVE_STORAGE_JSON_KEY_FILE') 仅返回密钥 json 文件的路径。我想我应该将实际的 JSON 内容作为环境变量传递。
    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2012-09-30
    • 2017-05-01
    • 2011-12-05
    相关资源
    最近更新 更多