1. 程式人生 > 其它 >1.GET 請求能傳圖片嗎?

1.GET 請求能傳圖片嗎?

      圖片一般有兩種傳輸方式:base64 和  file物件

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長度是有限制的,不同的瀏覽器長度限制不一樣,根據base64的編碼原理,base64圖片大小比原檔案大小大1/3,所以說大圖的base64太大會被截斷。但其實這個長度限制是瀏覽器給的,而不是GET請求本身。就是說,在服務端,GET請求長度理論上無限長,也就是可以傳任意大小的圖片。

file物件

<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 協議中兩種請求方式,僅僅是報文格式不同(或者說規範不同)
 GET 請求能不能帶 body 這個事是由 HTTP 協議來定義的