Как сохранить несколько файлов

Обновлено: 07.07.2024

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

article_add.html:

Оценить 42 комментария

Если данные отправляются через ajax, то файлы вроде просто так не уйдут. Для отправки формы в таком случае нужно использовать FormData.

Павел Аксенов: Здравствуйте! Вы правы, я использую AJAX. Почитал про FormData и кажется вы правы это то, что мне нужно. Я добавил JS код в пост, можете его проверить пожалуйста? Я добавил следующий код в метод saveForm:
var dataForm = new FormData(form);

На текущий момент поле image в forms.py выглядит так:


Выбрал файлы (изображения), нажал кнопку submit и выдала такую вот ошибку:


Можете пожалуйста подсказать, что делаю не так? Как я понял с Traceback ошибка с сохранением в БД.

Павел Аксенов: Я загрузил два изображения в поле image и заметил, что в media_root в папке images, куда должны отправляться изображения стоит первое из выбранных изображений. NogerbekNurzhan: может у одного из изображений было название не латинскими буквами? Павел Аксенов: Нет, у обоих выбранных изображений в названии были только латинские буквы. Вот названия файлов: "IMG_2184.JPG" и "IMG_2178.JPG". А почему вы спросили про названия файлов? Это как-то может повлиять? NogerbekNurzhan: по поводу кодировки, я просто обратил внимание на последнюю строку трейсбека.
var dataForm = new FormData(form); теперь эту переменную нужно передать на сервер
Павел Аксенов: Изменил код, но к сожалению выводится точно такая же ошибка как указывал ранее. Пробовал с разными форматами изображений и с разными количествами изображений (.jpg, .jpg). В папке image появляется лишь первый из указанных изображений. Изучив Traceback мне кажется, что проблемы с созданием объектов Image и сохранением данных в БД. В методе save в форме есть строка: Image.objects.create(image=each, acticle=instance) . Насколько она правильная по вашему мнению? Кстати, в роли первичного ключа в модели Article использую UUID. Не знаю может ли это влиять как-то на результат. NogerbekNurzhan: думаю, что код валится вот в этот момент article_form.save(commit=False).
Получается у формы вызывается метод save с флагом, чтобы не записывать в бд. Соответственно instance(вот тут instance = super(ArticleForm, self).save(commit)) в базу еще не попал, но дальше создается привязка файла к этому не сохраненному instance. Павел Аксенов: Да, я заметил в Traceback ссылку на это поле. Дело в том, что есть пару полей у модели Article, которые я счел опустить в своем посте. В том месте, где находятся такие символы "******" во view (article_add) записываются данные в эти поля. Сами эти поля нету в форме. Поэтому я и использовал article_form.save(commit=False). Как же быть в таком случаи? Есть ли у вас предложения? NogerbekNurzhan: можно попробовать разбить сохранение на два. Как-то так
Павел Аксенов: Я так понял эти два метода находятся на одном уровне? Протестировал данный код. Есть 2 проблемы. После нажатия кнопки submit перебрасывается на страницу, где показывается JSON данные. Возможно это происходит из-за того что убрали .serialize() из JS. Вторая проблема создается объект Article, но без изображений. Папка images пуста. Также пробовал переименовать названия метода с save_images на save_image, но результата это не дало. NogerbekNurzhan: "перебрасывается на страницу," это надо в консоли браузера смотреть, скорее всего js ошибки пишет и их исправлять. Сохранение картинок лучше делать после того как перестанет "перебрасывается на страницу,".

Павел Аксенов: перебрасывает на url article_add, который привязан с view article_add. В консоли выводит эту ошибку после submit:

34a7478faaaa4c249bd5a1de78c59ddc.PNG

NogerbekNurzhan: вот тут var dataForm = new FormData(form); возможно нужно только первый элемент var dataForm = new FormData(form[0]);

35d4bd5d18504f72a2dd2d698ab63355.PNG

Павел Аксенов: Протестировал. В Сhrome все по прежнему так же как описывал выше, а в Firefox на этот раз вывело:
Павел Аксенов: Уже просмотрел данный пост. Пробовал добавить как советовали люди в данном посте, но к сожалению не помогло. Создается объект Article, но изображений нет. Хотя возможно я что-то упустил. Что вы думаете?

Павел Аксенов: Здравствуйте! Вы предлагали в самом начали разделить метод save и предложили создать метод save_images. Мне кажется метод save_images не видит программа, раз создалась статья без изображений. Есть ли идеи на счет этого?

У меня возникла идея переместить код из метода save_images во вью и там создавать объекты Image непосредственно. Что вы думаете на счет этого? Может ли это сработать?

Павел Аксенов: Пробовал поместить создание изображений непосредственно во view таком вот образом, но выдает ошибку. Я думал добавлять изображения к уже созданной статье. Возможно мои рассуждения не верны раз выдает ошибку.

NogerbekNurzhan: Думаю, что метод save не возвращает article. Надо проверить, есть ли в этом методе return.

f3f4fac82ffb4540a545a02814ebc180.PNG

Павел Аксенов: СПАСИБО ВАМ БОЛЬШОЕ. Я и правду случайно удалил return. Задумка с переносам кода во view дала свои плоды. Протестировал, изображения добавились! В БД и папке image они есть. Хочется спросить еще одну маленькую вещь. Простите меня, если достал вас вопросами. Как вывести добавленные изображения определенной статьи в template? Пробовал такое, но вывело, что-то непонятное и в одной экземпляре: <img src="https://qna.habr.com/media_root/images/%3C%3C%20article.image%20%3E%3E">
NogerbekNurzhan: странно, что в форме отдельным методом не работает.
Так как у Article может быть несколько Image, то в шаблоне как-то так.
Павел Аксенов: Пробовал добавить данный код, но в шаблоне ничего не выводит к сожалению =( Данная конструкция работает: ``, проверил. Думаю проблема в src='>'. Есть ли другой способ указать адрес изображения? NogerbekNurzhan: в settings указаны MEDIA_URL и MEDIA_ROOT? Вот такой урл добавлен urls.py?

Вот что стоит у меня на данный момент и c такими настройками не выводится.

Павел Аксенов: Я добавил не в тот url. Нужно было в основной url добавить. Я же добавил в url приложения своего, где были url на текущую страницу. СПАСИБО ВАМ БОЛЬШОЕ ЗА ПОМОЩЬ. =) Павел Аксенов: А вы не в курсе, если указать будет ли выводится в поле image изображения текущей статьи для их дальнейшего редактирования или нужно еще что-то настраивать? NogerbekNurzhan: не знаю, я с пакетом django-multiupload не сталкивался. Но есть такое чувство, что редактирование не получится. Павел Аксенов: Да вы правы, я только что попробовал и поля image пустое =( Как думаете с чем это связано? Наткнулся на вот такой вот вопрос в данном проекте тут. У людей были подобные проблемы тоже =( Видите ли вы иной путь для редактирования? Допустим только поля image или с привязкой к текущему приложению это невозможно? NogerbekNurzhan: Связанно с тем, что эта форма, точнее это поле для мультизагрузки не связано с моделью джанги. Редактирование, можно сделать через formset'ы. Павел Аксенов: Если использовать FormSet, получается для каждого изображения будет свое поле. Я прав? А что если пользователь захочет к существующим изображением захочет добавить еще одну, либо удалить одно из существующих изображений? Не совсем представляю в голове все это. NogerbekNurzhan: Для редактирования использовать туже форму, что и сейчас (которая с MultiFileField), чтобы возможно было добавить новые файлы. А для редактирования уже существующих изображений использовать формсеты.

Павел Аксенов: Получается две разные формы создать? А никак нельзя их объяснить? Я немного запутался. Начал вот так. Должно быть что-то подобное получается?

NogerbekNurzhan: Да, тут будет две формы, одна для Article(+MultiFileField), а вторая для formset. Но в шаблоне они должны находиться в одном теге form Павел Аксенов: А как добиться того, чтобы они находились в одном теге?

Павел Аксенов: Я вас не так понял))) я думал article_form и image_form объединить в одно название и это название использовать в шаблоне))) вывело две формы, честно сказать не особо красиво и удобно для пользователя)) к тому же Formset работает коряво или я что-то упустил. Изменил одно из изображений на другое и нажал submit. В папке image появилось изображение, а в БД нет из за чего в шаблоне стоит старое изображение. Снова открываю форму для редактирования и там стоит ссылка на то изображение которое, последним добавил. Как все сложно. Можете взглянуть на код приведенный ниже? Хочется поинтересоваться у вас работа ли вы с WYSIWYG-редакторами и можно ли их использовать для моих нужд? Возможно стоит посмотреть в эту сторону, как вы думаете? Что-то на подобии WYSIWYG-редактора тостера. Удобная вещь ведь, пользователь сам редактирует может удалять изображения или добавлять))

программы архиваторы чтобы несколько файлов сделать одним

Сегодня большинство тендеров проходит на электронных площадках – на специально созданных для этого интернет сайтах.

Что может архивация

Всем, и победившим в тендере, и проигравшим, приходится на своих компьютерах заходить на специально созданные площадки и участвовать в торгах. Порой в ходе торгов, а также после их завершения, когда выбран победитель, требуется пересылать на тех же электронных площадках разные документы – файлы.

Нередки случаи, когда документов нужно переслать несколько, а на электронной площадке, точнее, на сайте, где проходит тендер, есть возможность прикрепить только один единственный файл. Что делать, как быть? Тут на помощь приходит возможность архивации данных, когда сразу несколько файлов, да что там файлов, сразу несколько папок с файлами, можно поместить в один единственный архивный файл. А затем можно прикрепить этот единственный файл к отправляемым на тендер данным.

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

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

Итак, архивация необходима, чтобы:

  • Сделать один файл из нескольких;
  • Сжать файлы;
  • Поставить пароль на архив и таким образом сделать доступ к архиву по паролю.

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

  • видео,
  • тексты,
  • документы,
  • картинки,
  • музыку и
  • так далее.

Что нужно для архивации

1) Нужно установить на свой компьютер программу, которая выполняет архивацию.

2) Файлы для архивации должны находиться в одной папке. Если файлы находятся в разных папках, то можно, например, создать новую папку и поместить туда все файлы для архивации.

Распространенной программой для архивации (то есть, архиватором) является бесплатная 7-Zip:

Для архивации есть также программа WinRAR, она платная.

Архивный файл, который получается после архивации с использованием программы 7-Zip, имеет расширение .zip. После архивации с помощью программы получается файл с расширением .rar. Пожалуй, разные расширения файлов, которые получаются после архивации – вот и вся разница между программами 7-Zip и WinRAR.

Ниже приведены примеры с использованием программы WinRAR.

Запускаем архивацию файлов, чтобы несколько файлов сделать одним

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

Возможно, что предварительно надо создать новую папку и в нее поместить все файлы из разных папок, подлежащие архивации. Либо можно в уже существующей папке выделить не все файлы, а только те, которые надо архивировать.

как несколько файлов сделать одним

Рис. 1 (кликните для увеличения). Выделение файлов, которые требуется поместить в один архив, и вызов программы архивации

  • Выделяем все файлы (1 на рис. 1) или только те, которые требуются.
  • Кликаем ПКМ (правой кнопкой мыши) по выделенным файлам, появится контекстное меню.
  • В этом меню щелкаем левой кнопкой мыши по опции «Добавить в архив «001.rar» (2 на рис. 1).

Таким образом будет запущен процесс архивации выделенных шести файлов (рис. 2):

архивация выделенных файлов winrar

Рис. 2 (кликните для увеличения). Идет архивация выделенных файлов

В моем примере файлов мало, они маленького размера, поэтому практически мгновенно в папке 001 появился архивный файл, в котором уже находятся все 6 файлов (рис. 3):

Архив 001 rar в одном файле содержатся 6 файлов

Рис. 3. Архив 001.rar, где в одном файле содержатся все шесть выделенных файлов

Теперь у нас есть архив, причем в одном единственном файле, в котором находятся шесть файлов. Можно этот файл-архив прикрепить к почте, к заявке на тендер и в любом месте, где это необходимо.

Как извлечь файлы из архива

извлечь из архива помещенные в него файлы

Рис. 4. Как извлечь из архива помещенные в него файлы

Чтобы извлечь файлы, следует по архивному файлу 001.rar кликнуть ПКМ (правой кнопкой мыши). В появившемся меню можно выбрать, например, «Извлечь в 001\». Тогда в существующей папке 001 появится новая подпапка 001, в которую будут извлечены файлы из архива 001.rar (рис. 5):

Папка 001 куда были извлечены из архива 001 rar шесть файлов

Рис. 5. Папка 001, в которую были извлечены из архива 001.rar все шесть помещенных в него файлов

Маленький секрет при архивации

Можно сначала создать папку, например, 001. Затем поместить в нее файлы, которые нужно архивировать. Далее кликнуть ПКМ (правой кнопкой мыши) прямо по папке 001. Появится меню, где можно выбрать «Добавить в архив».

В результате будет заархивирована вся папка 001. В архиве будут размещены не только сами архивируемые файлы, но и папка, в которой эти файлы хранятся. Таким образом, в архив, в один единственный архивный файл, можно помещать не только множество файлов, но и множество папок с файлами. Ведь перед архивацией можно не только выделить одновременно несколько файлов, но и выделить одновременно несколько папок.

Давайте также рассмотрим ниже и другие полезные варианты архивации файлов и папок.

Архивы под паролем

Архивы можно создавать с паролем. Тогда никто посторонний, не знающий пароль, не сможет извлечь и архива помещенные в него папки и файлы.

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

Архивацию с паролем нужно делать с осторожностью, так как в случае, если пароль забыт, утерян, восстановление данных из архива будет невозможно, совсем невозможно, ну, никак!

Многотомные архивы

Для особо больших файлов и папок, которые «не пролезают» в размер электронного письма и в других подобных случаях можно рекомендовать делать многотомные архивы. О такой возможности написано здесь.

Получатель же многотомного архива должен поместить все 3-4 принятые по почте файлы в одну папку, и затем запустить действие по извлечению папок и файлов из первого принятого файла архива. Далее программа автоматически извлечет все архивные данные последовательно из всех переданных по электронной почте архивных файлов.

Пытливый читатель может спросить: «Зачем применять многотомную архивацию, если можно большие файлы передавать через облака, через файлообменники?»

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

Архивация данных пользователя персонального компьютера

И, конечно, архивацию данных можно использовать для создания собственных архивов. Например, пользователь хранит все свои личные и уникальные данные на диске C: в папке «Мои документы». Папка эта может быть очень даже приличного размера, десятки, сотни гигабайт. Где-то нужно хранить архивы этих данных, а то ведь не дай бог, что-нибудь случится, например, с жестким диском. И где тогда возьмешь потерянные данные, откуда их восстановишь? Более детальные возможности архивации описаны в другой статье. Но то – системные методы защиты от любых возможных повреждений компьютера и операционной системы.

А если все-таки хотим только сохранить на внешнем носителе одни лишь данные пользователя из огромной по размерам папки «Мои документы»? Вот тут на помощь и придет архивация данных посредством программ архиваторов. Кликаем правой кнопкой мышки по папке «Мои документы» и запускаем архивацию: в одном большом-пребольшом архивном файле, в нескольких файлах многотомного архива, с паролем или без него.

Архивы без сжатия размеров файлов и папок

Кстати, если архивируемые папки очень-очень большие, то архивация данных может идти слишком долго, до 5-10 часов, порой! Чтобы ускорить процесс архивации, нужно в настройках архивации указать, что сжимать данные при архивации не нужно. Тогда архивация будет работать как простое копирование всех папок и файлов в один единственный файл архива или в несколько файлов многотомного архива.

Где и как можно указать данный параметр, называемый «Без сжатия», показано здесь. Тогда, конечно, архивируемые файлы не будут сжиматься по размеру, архив получится ровно такого же размера, как и суммарный размер архивируемых файлов и папок. Зато процесс архивации ускорится многократно, и будет занимать менее часа для папок особо большого размера.

Кстати, параметр «Без сжатия» полезно указывать и при архивации видео, музыки, фотографий, большинства рисунков, ибо перечисленные файлы уже сжаты за счет технологий их создания. Поэтому, оставляя программе архивации требование сжимать уже сжатые файлы, мы таким образом лишь в разы замедляем процесс помещения файлов в архив, но при этом реального сжатия уже сжатых файлов и папок не происходит.

Преодоление запретов и ограничений почтовых и иных служб с помощью архивов

В некоторых серьезных организациях совершенно справедливо устанавливают запреты на прием от посторонних отправителей электронной почты c вложенными в письма файлами, которые имеют определенные расширения. Например, администраторы сети какой-либо организации могут запретить прием файлов с расширениями .doc или .docx. А это расширения, ни много ни мало, широко распространенной программы Microsoft Word. И не секрет, что многие отправляемые и получаемые нами электронные письма содержат в качестве вложенных файлов привычные текстовые документы Word.

Зачем так поступают системные администраторы? Чтобы уберечься от вирусов и баннеров, которые нередко «маскируются» под файлы с широко применяемыми расширениями.

Также практически никуда невозможно переслать файлы с расширениями .exe или .dll – а это расширения так называемых исполняемых файлов Windows. Такие файлы попросту не дойдут до адресата, их «отсечет» система безопасности корпоративной сети, в которой находится пользователь, принимающий электронное письмо.

Можно ли обойти запреты

Опять же возникает вопрос: «Получается, что можно таким образом обходить препятствия, установленные системами безопасности вычислительных систем?» Так, да не совсем так. Дело в том, что прикрепленный к письму «вирус» в форме файла с недопустимым расширением, может навредить ВСЕЙ корпоративной системе. А вот если этот файл оказался внутри архива, то он всей системе не навредит. Он может навредить только самому получателю письма, одному единственному пользователю большой корпоративной системы. Это не так опасно, как уязвимость всей корпоративной системы.

Получается, что системные администраторы таким образом в первую очередь оберегают всю корпоративную систему от проникновения вирусов и шпионов. Получатель же писем должен сам смотреть, от кого пришло письмо. Если письмо с вложенным архивом пришло от незнакомого человека или организации, то не стоит даже пробовать открыть архив. Как говорится, руки прочь от присланного архива! Достаточно задать вопрос администраторам корпоративной системы, мол, что делать с таким-то письмом? Поверьте, они-то уж разберутся, можно или нельзя открывать присланный архив от незнакомого человека или организации.

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

У меня есть много файлов, которые я создаю на моем компьютере Windows 8 и сохранить в моих файлах, но я хочу, чтобы сохранить их на моем USB флэш-накопитель тоже. Обычно я просто сохраняю файл на своем компьютере, а затем снова сохраняю его на флэш-накопителе, но это действительно неудобно. Есть ли способ настроить его так, чтобы файлы сохранялись в обоих местах одновременно? В основном, это документы .формат HTML. ,js,.CSS и .py файлы, но будут .docx и .txt-файл.

Windows 8 имеет встроенный механизм клонирования файлов под названием "История файлов". Если эта функция включена, можно разрешить резервное копирование (или, в вашем случае, двойное сохранение) файлов из определенной папки на USB-накопитель.

Это можно получить, перейдя в Панель управления - > Система и безопасность - > История файлов


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


из этого меню, вы можете добавьте любую форму внешнего хранилища для использования в качестве резервного диска. Выберите ваш USB-накопитель.

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

enter image description here

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

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

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

Не волнуйтесь! Следующее руководство поможет вам отсканировать несколько страниц и сохранить их в одном файле PDF, чтобы вам не приходилось искать в хранилище, когда они вам нужны.

Как отсканировать несколько сканов в один PDF-файл с помощью приложения Document Scanner

Шаг 1: Загрузите и установите Сканер документов от Lufick приложение из Google Play. После установки откройте приложение.

Шаг 2: Нажмите на значок плюса в правом нижнем углу.


Шаг 3: Выберите вариант «Сканировать с камеры».


Шаг 4: Нажмите на кнопку камеры внизу и повторите, чтобы сделать несколько фотографий.


Шаг 5: Когда вы закончите фотографировать документ, нажмите на значок галочки в правом нижнем углу.


Шаг 6: На следующем экране вы можете редактировать документ, и когда редактирование будет завершено, нажмите значок стрелки вправо в правом нижнем углу.


Шаг 7: После редактирования всех отсканированных изображений нажмите значок галочки.


Шаг 8: Нажмите на вкладку «Открыть PDF» внизу. Это проверит только что созданный PDF-файл.


Шаг 9: Нажмите на значок «Сохранить» внизу.


Шаг 10: Выберите вариант «Сохранить как PDF» и нажмите «ОК».



Шаг 11: Введите имя документа и нажмите OK, чтобы сохранить отсканированные изображения в формате PDF.


Вот и все! Сохраненный PDF-файл теперь будет сохранен на вашем устройстве. PDF-файл будет содержать несколько страниц отсканированного документа, что позволит вам с легкостью искать и управлять своими документами.

Как объединить отсканированные документы в один PDF-файл с помощью приложения Microsoft Office Lens

Хотя многие приложения для сканирования документов позволяют создавать PDF-файлы для нескольких сканирований, в этом руководстве основное внимание уделяется приложению Microsoft Office Lens для Android. Чтобы сохранить несколько отсканированных документов в один PDF-файл с помощью приложения Microsoft Office Lens для Android, выполните следующие действия:


Файл PDF будет сохранен в папке «Загрузки» на вашем устройстве, а также в вашей учетной записи OneDrive. Однако, если вы не хотите сохранять его как файл PDF, просто выберите опцию галереи в меню сохранения.

Проверьте: Как сделать резервную копию вашего телефона Android

Это все, что вам нужно сделать, чтобы сохранить несколько отсканированных изображений в один файл PDF с помощью приложения Microsoft Office Lens для Android.

Вы часто сканируете документы на своем Android-устройстве? Сообщите нам, помогло ли это руководство вам лучше сканировать их, оставив комментарий ниже.

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