предисловие
Я забыл, где я видел эту тему, я думаю, что это очень интересно, позвольте мне рассказать вам свой ответ и ход мыслей.
Прежде всего, нам нужно знать, что обычно существует два метода передачи изображений:base64
иfile
объект.
изображение base64
рисунокbase64
Кодирование должны были видеть все:
base64
по сути является строкой, аGET
Запрашиваемые параметры находятся вurl
внутри, поэтому поместите изображение прямоbase64
данные вurl
внутри, это может быть достигнутоGET
Просьба загрузить фотографии.
input
Изображение, полученное полем ввода,file
предмет, картинаfile
поворот объектаbase64
:
// img参数: file文件或者blob
const getBase64 = img => {
return new Promise((resolve,reject) => {
const reader = new FileReader();
reader.onload = e => {
resolve(e.target.result);
};
reader.onerror = e => reject(e);
reader.readAsDataURL(img);
})
}
Вот проблема,GET
просилurl
Длина ограничена. Разные браузеры имеют разные ограничения длины. Самый длинный, вероятно,10k
вокруг, по словамbase64
принцип кодирования,base64
Размер изображения на 1/3 больше исходного размера файла, так сказатьbase64
Вы можете отправлять только очень маленькие картинки, большие картинкиbase64
Слишком длинный будет усечен.
Но на самом деле это ограничение на длину задает браузер, а неGET
Сам запрос, то есть на стороне сервера,GET
Длина запроса теоретически бесконечна, то есть можно отправлять изображения любого размера.
файловый объект
Давайте посмотрим на эту сцену:
<form action="http://localhost:8080/" method="get">
<input type="file" name="logo">
<input type="submit">
</form>
Выберите изображение, а затем отправьте форму, отправка может быть успешной, но интерфейс не может получить файл. просилurl
станетhttp://localhost:8080/?logo=xxx.png
, но не будет нести данные изображения.
нормальная ситуация,file
Данные объекта помещаются вPOST
просилbody
внутри, и естьform-data
кодирование.
ТакGET
ли запросbody
тело? Ответ положительный.
GET
иPOST
Принципиальной разницы нет, они простоHTTP
Два метода запроса в протоколе отличаются только форматом сообщения (или спецификацией).
Коллеги, занимавшиеся низкоуровневой разработкой, могут быть знакомы с ним.HTTP
запрос, они получили что-то вроде этого:
Возьмите каштан, обычныйGET
запрос, они получают что-то вроде этого:
GET /test/?sex=man&name=zhangsan HTTP/1.1
Host: http://localhost:8080
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: Keep-Alive
POST
Запрос выглядит так:
POST /add HTTP/1.1
Host: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
sex=man&name=Professional
такой же,DELETE
,PUT
,PATCH
Запросы также являются такими сообщениями. Когда нижний уровень анализирует это сообщение, ему все равно, что это за запрос, поэтому мы говоримGET
запрос также может иметьbody
тело, также может передаватьform-data
данные.
Желающие могут взятьpostman
попробуй и увидишьGET
Запрос на загрузку изображения, может ли интерфейс получить файл изображения:
конец
В итоге,GET
Запрос может отправить фотографии, ноGET
иPOST
Вы все равно должны соблюдать правила, если для этого есть закулисье, просто забейте его!