Использование multipart / form-data лучше, чем JSON + Base64?

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

однако я обнаружил, что использование multipart/form-data не идеально. Объекты на моем сервере могут иметь другие объекты, вложенные в них, и, таким образом, представлены как объект JSON с другими объектами JSON, встроенными внутри.

Я хотел бы, чтобы клиент начал делать запросы POST/PUT с помощью JSON представление точно так же, как это ожидалось бы в запросе GET на сервер, в спокойной манере. Таким образом, мне не нужно сглаживать поля, которые могут быть вложены в пару слоев внутри объекта JSON, чтобы использовать multipart/form-data.

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

Я потеря для того, как это спроектировать. Должен ли я просто загрузить JSON клиента с полями, закодированными в base64, и принять удар 25%? Или я должен иметь объект JSON, представленный как своего рода переменная" json " в запросе Multipart/form-data, и иметь двоичные файлы для загрузки в качестве другой переменной?

1 ответов


должен ли я просто загрузить JSON клиента с полями, закодированными в base64, и принять удар 25%?

хит будет 33%, так как 4/3=1.33.

или я должен иметь объект JSON, представленный как своего рода переменная" json " в запросе Multipart / form-data и имеет двоичный код файлы для загрузки в качестве другой переменной?

Это должно работать.

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