Loading

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 协议来定义的

posted @ 2022-05-17 21:10  远乡人  阅读(89)  评论(0编辑  收藏  举报