Я пытаюсь реализовать на стороне сервера кнопку загрузки для stati c ресурсов (обслуживаемых через AWS S3) в Django веб-приложении.
Что я я пробовал:
Сначала я попробовал атрибут download
с тегами a
. Но в моем опыте это не покрывает Firefox (т.е. вместо загружаемого ресурса открывается новая вкладка браузера и ресурс отображается в этом окне).
Я попробовал решение на стороне сервера, как только вышеперечисленное не удалось. В частности, в шаблоне html у меня есть:
<form method="GET" action="{% url 'download_image' %}" target="_blank">
<input type="hidden" name="img_url" value="{{ img_url }}">
<button>Download</button>
</form>
И в представлении я пытаюсь:
def download_image(request):
"""
Download the image
"""
image_url = request.GET.get("img_url",None)
# image_url value is //s3.eu-central-1.amazonaws.com/my-app/ebc4596f-d7db-340f-b7d6-4952c949f011.jpg
if image_url:
with open('https:'+image_url, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="image/jpg")
response["Content-Disposition"] = 'attachment; filename="content.jpg"'
return response
В результате получается IOError
:
Нет такого файла или каталога: u 'https://s3.eu-central-1.amazonaws.com/my-app/ebc4596f-d7db-340f-b7d6-4952c949f011.jpg'
Мне кажется, что я делаю что-то в корне неправильно. Может ли эксперт показать мне пример? Заранее спасибо.