Изменить имя загружаемого файла django

Обновлено: 03.07.2024

После сохранения моей модели 'Products' я хотел бы, чтобы загруженное изображение было названо так же, как pk, например 22.jpg или 34.jpg я не хочу менять формат изображения только имя. Как это можно сделать? пример моей модели пока что приведен ниже.

4 ответа

Это базовая форма процесса загрузки файла изображения Django. Модель изображения использует класс ImageField. У меня есть пользовательская кнопка отображения поверх кнопки загрузки по умолчанию, которая обычно отображает имя изображения сбоку от него. Мне нужно иметь возможность захватить это имя.

Я использую этот код для загрузки файлов из Parse query.find().then(function(results) < window.open(results[0].attributes.File.url(), _self); >); а потом я получаю такое имя файла : tfss-de626baf-ab29-4aaf-9bce-6b5876862a75-myfile.zip Можно ли изменить имя файла при загрузке на это? myfile.zip.

Вы можете передать функцию в поле upload_to :

Мои предложения состояли бы в том, чтобы вернуть случайное имя файла вместо . . В качестве бонуса, это будет более безопасно.

Что происходит, так это то, что Django вызовет эту функцию, чтобы определить, куда должен быть загружен файл. Это означает, что ваша функция отвечает за возврат всего пути к файлу, включая имя файла. Ниже приведена модифицированная функция, в которой вы можете указать, куда загружать и как ее использовать:

Django 1.7 и новее не будут выполнять миграцию с такой функцией. Основываясь на ответе @miki725 и этом билете, вам нужно сделать свою функцию такой:

Вы можете заменить строку, которую вы назначили upload_to , вызываемой, как описано в документах . Однако я подозреваю, что первичный ключ может быть недоступен в момент использования параметра upload_to .

итак, мы справимся с этим:

Убедитесь, что модуль time был импортирован.

это продолжение моего вопроса здесь: ImageField / FileField Django форма в настоящее время не может обрезать путь к имени файла В моем приложении Django есть поле imagefield, загруженное в S3 После обрезки имени пути к файлу изображения изображение становится недоступным, так как url обрезается.

Похожие вопросы:

Как получить имя ImageField в django. settings.py: MEDIA_ROOT = os.path.join(BASE_DIR,'myApp\media') MEDIA_URL = '/media/' DEFAULT_LOGO = MEDIA_ROOT + '\logo.jpg' У меня есть следующая модель: class.

мне действительно нужно изменить имя файла при загрузке , в настоящее время мой компонент заменяет файлы с тем же именем . где я должен поместить свой код для изменения имени файла в контроллере или.

Какой самый простой способ изменить размер файла изображения, загруженного через форму Django, как ImageField ?

Это базовая форма процесса загрузки файла изображения Django. Модель изображения использует класс ImageField. У меня есть пользовательская кнопка отображения поверх кнопки загрузки по умолчанию.

Я использую этот код для загрузки файлов из Parse query.find().then(function(results) < window.open(results[0].attributes.File.url(), _self); >); а потом я получаю такое имя файла .

это продолжение моего вопроса здесь: ImageField / FileField Django форма в настоящее время не может обрезать путь к имени файла В моем приложении Django есть поле imagefield, загруженное в S3 После.

Есть ли способ изменить / установить имя файла при загрузке? Пример: Джон Смит загрузил свой снимок головы, и имя файла- 4321431-small.jpg . При загрузке я хотел бы переименовать файл в.

Есть ли способ изменить имя файла на GUID после того, как реальный файл будет выбран и готов к загрузке? Пользователь хочет оставить старый файл (ы) в репозитории на сервере, и когда новый файл.

Проблема такая - клиенты грузят файлы в свой профиль, но названия файлов часто могут быть кирилицей. FreeBSD, на которой крутится сервер, названия файлов кирилицей не воспринимает. Соответственно надо как-то их переименовывать при записи. Как это сделать? И, если можно, как сделать так чтобы название было уникальным для каждого файла, скажем по времени загрузки или еще как-то.











savao:названия файлов кирилицей не воспринимает

Что-то сомневаюсь. Это у тех, кто пользуется FreeBSD, ни оного русского названия файлов? Django самостоятельно подправляет название файла, что бы оно было допустимым. То есть если сохраняет с кириллицей - значит все норм. Погуглите, проблема наверное в настройках системы и локалей.

savao: И, если можно, как сделать так чтобы название было уникальным для каждого файла, скажем по времени загрузки или еще как-то.

Django самостоятельно добавляет "_" к названию, что бы оно было уникально. Еще посмотрите в документации описание атрибута upload_to у FieldFile. Там как раз про дату и др.

В доках я смотрел, но там немного не то. Там предлагают файлы распихивать по папочкам вида /filefolder/%Y/%m/%d А само название неизменное остается. Или я что-то не так ччитал. А про файлы, может на самом деле проблемы с настройками фри, но я не специалист по этим вопросам. Но знаю что при попытке скопирывать на сервер файл с кирилическим названием получается файл с названием ввиде кучи знаков вопроса, а при попытке загрузить подобный файл через джангу, получается куча ругани о кодировках. Попробую поговорить со спецами по фре, может чего подскажут. Но я где-то в блогах читал что джанга и сама с кирилицей не очень дружит и если грузит файлы с кириличесикими названиями, то заменяет все буквы на знаки &quot;_&quot; Может это уже устаревшая инфа. Я же тока недавно начал с ней работать, так что многого еще не успел освоить.











savao:Но я где-то в блогах читал что джанга и сама с кирилицей не очень дружит

Это бред. Не была бы Django так популярен, если бы криво работал с кириллицей. Главное что бы все хранилось или преобразовывалось в utf8. "_" добавляется к названию файла для уникальности.

В этом документе описываются API-интерфейсы Django для доступа к файлам, например загруженным пользователем. API нижнего уровня достаточно общие, чтобы вы могли использовать их для других целей. Если вы хотите работать со «статическими файлами» (JS, CSS и т. Д.), См. Управление статическими файлами (например, изображениями, JavaScript, CSS) .

По умолчанию, Django хранит файлы локально, используя MEDIA_ROOT и MEDIA_URL настройку. В приведенных ниже примерах предполагается, что вы используете эти значения по умолчанию.

Однако Django предоставляет способы написания собственных систем хранения файлов, которые позволяют полностью настраивать, где и как Django хранит файлы. Вторая половина этого документа описывает, как работают эти системы хранения.

Использование файлов в моделях ¶

Когда вы используете FileField или ImageField , Django предоставляет набор API, которые вы можете использовать для работы с этим файлом.

Рассмотрим следующую модель, использующую ImageField для хранения фотографии:

Любой Car экземпляр будет иметь photo атрибут, который можно использовать для получения сведений о прикрепленной фотографии:

Этот объект - car.photo в примере - является File объектом, что означает, что он имеет все методы и атрибуты, описанные ниже.

Файл сохраняется как часть сохранения модели в базе данных, поэтому на фактическое имя файла, используемое на диске, нельзя полагаться до тех пор, пока модель не будет сохранена.

Например, вы можете изменить имя файла, name установив путь к файлу относительно местоположения хранилища файлов ( MEDIA_ROOT если вы используете значение по умолчанию FileSystemStorage ):

Хотя в экземпляре доступны ImageField атрибуты данных, не относящиеся к изображению, такие как height , width и size , базовые данные изображения нельзя использовать без повторного открытия изображения. Например:

File Объект ¶

Внутри Django использует django.core.files.File экземпляр каждый раз, когда ему нужно представить файл.

В большинстве случаев вы будете использовать то, File что вам предоставил Django (то есть файл, прикрепленный к модели, как указано выше, или, возможно, загруженный файл).

Если вам нужно построить File самостоятельно, самый простой способ - создать его с помощью встроенного file объекта Python :

Теперь вы можете использовать любые задокументированные атрибуты и методы File класса.

Имейте в виду, что файлы, созданные таким образом, не закрываются автоматически. Для автоматического закрытия файлов можно использовать следующий подход:

Закрытие файлов особенно важно при доступе к полям файла в цикле по большому количеству объектов. Если файлы не закрываются вручную после доступа к ним, может возникнуть риск нехватки файловых дескрипторов. Это может привести к следующей ошибке:

Файловое хранилище ¶

За кулисами Django делегирует решения о том, как и где хранить файлы, системе хранения файлов. Это объект, который на самом деле понимает такие вещи, как файловые системы, открытие и чтение файлов и т. Д.

Хранилище файлов по умолчанию в Django задается DEFAULT_FILE_STORAGE параметром; если вы явно не укажете систему хранения, она будет использоваться.

См. Ниже подробные сведения о встроенной системе хранения файлов по умолчанию и см. Создание собственной системы хранения для получения информации о создании собственной системы хранения файлов.

Объекты хранения ¶

Хотя большую часть времени вы хотите использовать File объект (который делегирует надлежащее хранилище для этого файла), вы можете напрямую использовать системы хранения файлов. Вы можете создать экземпляр некоторого настраиваемого класса хранилища файлов или, что часто более полезно, вы можете использовать глобальную систему хранения по умолчанию:

См. API хранилища файлов для API хранилища файлов.

Класс хранилища встроенной файловой системы ¶

Django поставляется с django.core.files.storage.FileSystemStorage классом, который реализует базовое хранилище файлов локальной файловой системы.

Например, следующий код будет хранить загруженные файлы /media/photos вне зависимости от ваших MEDIA_ROOT настроек:

Пользовательские системы хранения работают одинаково: вы можете передать их в качестве storage аргумента в файл FileField .

Использование вызываемого ¶

Вы можете использовать вызываемый объект в качестве storage параметра для FileField или ImageField . Это позволяет вам изменять используемое хранилище во время выполнения, например, выбирая разные хранилища для разных сред.

Ваш вызываемый объект будет оцениваться при загрузке классов ваших моделей и должен возвращать экземпляр Storage .

Как Django переименовывает загруженное изображение (переименовать его в файл загрузки)

Недавно созданные файлы в Project App Storage.py:

существовать models.py Добавьте следующий код в файл:

Эффект выглядит следующим образом:

Интеллектуальная рекомендация


WECHAT MILLY WAY POINT CAMENT CARD - СОВРЕМЕННЫЕ СТРАНИЦЫ ПРОГЛЯЮТНОЕ ЗНАЧЕНИЕ (Запрос)

WECHAT Small Pass Pass Value и значение приобретения: 1. Установите способ настройки идентификатора идентифицирует значение параметра, передаваемое после прыжка; 2, используя метод Data-XXXX для идент.


Текущая задача Узел больше экземпляров


[Linux] Программирование сетевых сокетов UDP

Что такое протокол UDP Протокол UDP называетсяПротокол пользовательских датаграмм UDP - протокол транспортного уровня Без установления соединения, ненадежная передача, ориентированная на дейтаграмму П.



Основная идея обработки больших данных - разделяй и властвуй

Разделяй и властвуй - «разделяй и властвуй» Как мы все знаем, компьютеры очень быстрые и используются людьми. Однако независимо от того, насколько быстрым является компьютер, способность о.

Вам также может понравиться

Равный и hashCode анализ исходного кода

[size = medium] равно, и hashCode также содержит много информации в Интернете. Это просто для записи моего текущего понимания и знаний. Вы часто будете слышать такие слова. Когда вы переписываете мето.

Простое приложение SiteMesh

1. Добавьте sitemesh-2.4.2.jar в javaweb 2. Создайте папку декораторов под webroot 3. Создайте файл декоратора leftRight.jsp topbottom.jsp test.jsp moreSongs.jsp 5. Создайте decorators.xml под web-inf.


Perfect Spring Boot использует log4j2 для вывода в разные файлы по уровню

1. Pom.xml импорт необходим банку 2. Напишите файл конфигурации log4j2 (обратите внимание на примечание) 3. Написать тестовый класс 4. Просмотр результатов.

Huawei неожиданно перетянули из гугла! Официальный Android больше не поддерживает телефоны Huawei


Совместное использование открытого исходного кода с нулевым разглашением и использование модуля ESP8266wifi

1. Описание MCU: стандартная плата для разработчиков с открытым исходным кодом с нулевым разглашением Модуль WIFI: ESP-12F Инструменты разработки: Инструменты разработки с открытым исходным кодом с ну.

Читайте также: