Проводка файла с помощью Json

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

Я собираюсь сделать это -

  1. Выберите файл в теге ввода файла.
  2. С помощью HTML5 File Reader Api сначала прочитайте файл.
  3. Преобразование содержимого файла в base64.
  4. Добавить содержимое base64 в объект JS в формате uri данных.
  5. Преобразование JS-объекта в json и отправку его на сервер.

Интересно, является ли это единственным законным способом достижения моей цели? Кроме того, если есть плагин, уже доступный где-нибудь, который дает мне эту способность?

1
nl ja de
Мне нужно использовать Ajax. Форма submit не будет изящным решением. Если я смогу добиться успеха, я бы превратил его в плагин. Так что вы можете легко загрузить файл с дополнительными данными.
добавлено автор Tushar, источник
@TusharMathur: Если вы настаиваете на использовании AJAX, вы все равно можете придерживаться установленных решений (например, данных формы нескольких частей), даже если вы будете использовать API HTML5. Есть решения, которые используют функции Flash и т. Д., Но если вы можете использовать HTML5 вместо этого, тогда это здорово.
добавлено автор Tadeck, источник
Почему бы вам просто не использовать скрытые поля ввода, если вам нужно разместить дополнительные данные? Его проще реализовать, так как вам не нужно возиться с файловыми читателями (совместимость?), Закодированными в Base64 данными или JSON, вы можете просто получить значения из POST.
добавлено автор Cerbrus, источник

1 ответы

Нет, это не единственный способ - один из других способов - просто отправить форму с файлом. В такой форме используется тип содержимого multipart/form-data .

См. документация W3C по этому вопросу :

Тип содержимого « application/x-www-form-urlencode d» неэффективен для отправки больших количеств двоичных данных или текста, содержащих символы, отличные от ASCII.

     

Тип содержимого « multipart/form-data » должен использоваться для отправки форм, содержащих файлы, данные, отличные от ASCII, и двоичные данные.

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

0
добавлено
ваше решение точно такое же, как плагин jQuery для загрузки файла ajax. Я вижу, что ваш вопрос верен. Так нет ли преимущества использования json для загрузки файла? Нет ли случаев использования?
добавлено автор Tushar, источник
Также обратите внимание на размер данных. Насколько я помню, base64-кодированные данные занимают в 3 раза размер исходного файла.
добавлено автор Tadeck, источник
@TusharMathur: Есть некоторые. Рассмотрим более сложные (многомерные) данные, которые лучше представлены с использованием JSON, чем кодированные по url-формам (обычно используемые для отправки данных вместе с файлами) - в таком случае вы могли бы использовать часть, закодированную как JSON, но это может быть неразумно/достаточно чистый. Также это может не дать вам достаточно преимуществ, если файлы будут небольшими. В другом случае вы отправляете что-то, где base64-кодированные данные являются частью структурированного документа (со значительным местом в структуре) - что-то трудно представить с помощью multipart/form-data . Там может быть больше примеров.
добавлено автор Tadeck, источник
@TusharMathur: Тем не менее, я думаю, что ваш случай довольно прост, и вы, вероятно, должны придерживаться представления плоских данных с файлами в стиле «старой школы». Вы получаете большую надежность вместо сомнительных преимуществ (вы не знаете, что вам понадобится, поэтому вы не знаете, нужны ли вам более сложные решения, для которых также потребуется поддержка на стороне сервера).
добавлено автор Tadeck, источник
@Cerbrus: Само преобразование тривиально. Я уже упоминал разницу в размерах, но размер не всегда имеет значение;) Возможно, вам понадобится, например. чтобы использовать более сложную структуру, которую вы будете отправлять назад и вперед между различными системами - в этом случае вы можете захотеть сохранить данные вместе, особенно когда файлы крошечные.
добавлено автор Tadeck, источник
Как правило, при загрузке файла вы не хотите использовать JSON. Вы конвертируете двоичные данные в обычный текст (base64). Это всегда занимает больше места, не говоря уже о том, что вам нужно сначала преобразовать файл в b64.
добавлено автор Cerbrus, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском