Я занимаюсь разработкой приложения Django 2.1 и пытаюсь обслужить мультимедийные файлы через Google Cloud Storage (GCS).
Я создал корзину с открытым доступом для чтения и установил пакет django-storages .
Мне удалось заставить интеграцию работать, но я не знаю, как заставить браузер кэшировать изображения, загруженные из GCS.
Сейчас изображения загружаются даже для этих страниц.что я уже посетил.
Это мои настройки в settings.py :
# GCS INTEGRATION
# ------------------------
DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = '<BUCKET>'
GS_DEFAULT_ACL = 'publicRead'
GS_CACHE_CONTROL = 'max-age=86400'
# MEDIA
# -------------------------
MEDIA_URL = 'https://storage.cloud.google.com/<BUCKET>/'
MEDIA_ROOT = 'https://storage.cloud.google.com/<BUCKET>/'
Я также установил переменную среды, которая указывает на учетную запись службы GCS JSON-файл
GOOGLE_APPLICATION_CREDENTIALS='<PATH-TO-JSON>'
В шаблон, который показывает список изображений, я поместил следующий код (внутри цикла):
<div class="uk-width-1-4 uk-card-media-left uk-cover-container">
<img data-src="{{object.resource.url}}" alt="" uk-cover uk-img>
</div>
При визуализации сервером этот фрагменткод переводится следующим образом:
<div class="uk-width-1-4 uk-card-media-left uk-cover-container">
<img data-src="https://storage.cloud.google.com/<BUCKET>/<PATH-TO-FILE>" alt="" uk-cover="" uk-img="" class="uk-cover" src="https://storage.cloud.google.com/<BUCKET>/<PATH-TO-FILE>" style="width: 169px; height: 126px;">
</div>
Я попытался поиграть с некоторыми тегами заголовков с помощью следующего миксина.
class CacheControlMixin(object):
cache_timeout = 60*60
def get_cache_timeout(self):
return self.cache_timeout
def dispatch(self, *args, **kwargs):
response = super(CacheControlMixin, self).dispatch(*args, **kwargs)
patch_response_headers(response, self.get_cache_timeout())
patch_cache_control(response, public=True)
return response
Само собой разумеется, это не сработало.