Я работаю с Django 1.7 и Python 3.4.Django download image from ImageField
У меня есть модель, как этот:
class ImageModel(models.Model):
image = models.ImageField(verbose_name='image', upload_to='uploaded_images/')
Теперь я хочу, чтобы загрузить файл, который сохраняется в/статический/uploaded_images /. Например, у меня есть ссылка: www.example.com/image/download/1
, где 1 - id объекта ImageModel.
Теперь у меня есть мнение:
def download_image(request, image_id):
img = ImageModel.objects.get(id=image_id)
(what I need to do?)
Что дальше? Как создать представление, которое приведет к загрузке этого изображения?
Обратите внимание, что это будет нормально работать, если имена находятся в пределах диапазона ASCII, но с ошибками с большими символами. Content-Disposition поддерживает кодированное имя UTF-8, но старые браузеры (pre IE8) полностью игнорируют это. Внутри он лучше работает с скрытым перенаправлением на URL с именем файла в URL-адресе. Все браузеры будут поддерживать это, и вы избежите неприятной ошибки '[1]', которую IE будет прикреплять к удаленным именам файлов. –
@MikeMcMahon. Я не совсем уверен в том, что вы пытаетесь объяснить, но я был бы рад выучите любой другой способ сделать это, если это будет лучше. Не могли бы вы дать некоторую ссылку на информацию об этом? – AlvaroAV
Рассмотрите имена файлов с символами кандзи или кириллицей. 'filename =% s' не будет работать. Он будет работать в FireFox/Chrome, но не <= IE8 и, возможно, мобильных браузерах (в зависимости от используемого мобильного устройства и технологии браузера). Существует формат 'filename * = UTF-8 ''% s', который поддерживает кодированные символы UTF-8, и это будет работать * иногда *. Лучше всего (изнутри DJango) выполнить HttpRedirect() до URL, содержащего полное имя файла, как часть пути. ВСЕ браузеры могут интерпретировать это и символы вне стандартного диапазона. –