面试:GET 请求能上传图片吗,已解决

转公众号: java大后端

前言

曾经遇到的面试题,觉得挺有意思,来说下我的答案及思考过程。

首先,我们要知道的是,图片一般有两种传输方式: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 请求长度理论上无限长,也就是可以传任意大小的图片。

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 协议中两种请求方式,仅仅是报文格式不同(或者说规范不同)。

做过底层开发的同事可能比较熟悉,之前我们C语言的同事和我讲,我们的 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 

同样,DELETEPUTPATCH 请求,也都是这样的报文。底层解析这个报文的时候,并不关心是什么请求,所以说 GET请求也可以有body 体,也可以传 form-data 数据。

有兴趣的可以拿 postman 试一下,看看 GET 请求传图片,接口能不能收到图片文件:

图片

结尾

综上所述,GET 请求是可以传图片的,但是 GET 和 POST 的规范还是要遵守的,如果有后台让你这么做,锤他就行了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40505.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序服务器请求和上传数据,上传图片并展示,提交表单完整实例代码附效果图

微信小程序开发交流qq群 173683895 、 526474645 &#xff1b; 承接微信小程序开发。扫码加微信。 为了方便大家&#xff0c;下面列出微信请求服务器常用的几种方式&#xff0c;并附上代码和注释。 一&#xff1a; GET请求&#xff08;最常用的&#xff09; wx.request(…

LeCun力荐!哈佛博士分享如何用GPT-4搞科研

编&#xff5c;桃子 源&#xff5c;新智元 排版 | 夕小瑶的卖萌屋 进NLP群—>加入NLP交流群(备注nips/emnlp/nlpcc进入对应投稿群) 用GPT-4搞科研未来或许成为每个人的标配&#xff0c;但是究竟如何高效利用LLM工具&#xff0c;还得需要技巧。近日&#xff0c;一位哈佛博士分…

LeCun力荐!哈佛博士分享用GPT-4搞科研,细到每个工作流程

【导读】用GPT-4搞科研未来或许成为每个人的标配&#xff0c;但是究竟如何高效利用LLM工具&#xff0c;还得需要技巧。近日&#xff0c;一位哈佛博士分享了自己的经验&#xff0c;还获得了LeCun的推荐。 GPT-4的横空出世&#xff0c;让许多人对自己的科研担忧重重&#xff0c;…

8月 | O'Reilly好书推荐[每月送书]

OReilly读者俱乐部联合图灵教育8月好书推荐&#xff01; 以下是小编为OReilly粉丝整理的一期OReilly书单&#xff0c;一共7本&#xff0c;包含各个领域&#xff0c;有基于Python的深度学习入门书&#xff0c;还有R数据科学领域传奇人物著作&#xff0c;有SQL经典书重新出版&…

冰河最新电子书上架第一天阅读量超15万,你值得拥有

大家好&#xff0c;我是冰河~~ 最近不是有小伙伴在问我为啥公众号的文章更新频率低了吗&#xff1f;今天就跟大家说一下吧&#xff0c;这不是最近在整理一本原创电子书吗&#xff1f;没错&#xff0c;这次是和阿里云开发者社区合作&#xff0c;在阿里云藏经阁上架了一本冰河的…

亚马逊kindle设置_如何让您的Amazon Echo大声朗读您的Kindle书

亚马逊kindle设置 Ever wish you could read your books while doing other stuff at the same time? Sure, you could listen to Audiobooks with Audible, but your Amazon Echo can also read your Kindle ebooks to you out loud. Here’s how. 曾经希望您可以在同时做其他…

Bookdown搭配GitHubPages发布电子书

文章目录 前言一、前期准备二、发布步骤1. bookdown项目1.1 安装R包1.2 新建project1.3 修改成自己的笔记 2. GitHubPages发布2.1 增加本地_bookdown.yml文件一行参数2.2 部署到GitHub2.3 修改GitHub仓库的一些属性 3. 成功 参考文章 前言 你想发布一本自己的电子书吗&#xf…

今天发现,不能从亚马逊买纸质图书了!!!

打算买一本纸质的书送人&#xff0c;搜了半天发现亚马逊全是电子书&#xff0c;虽然预料之中&#xff0c;但没想到还是来得太突然。其实我自己已经很久没买过纸质书了。 当年买第一本电纸书的时候&#xff0c;花了不到二十块钱&#xff0c;心疼的我要命。后来用习惯了&#xf…

不知道买啥绘本?适合3-6岁儿童的绘本书单,建议父母收藏

作为父母&#xff0c;给孩子选绘本&#xff0c;首要原则是&#xff0c;内容吸引人&#xff0c;让孩子能坐得住。我本人买过很多绘本&#xff0c;当然也有踩过坑&#xff0c;根据我自己买绘本的相关经验&#xff0c;结合我家孩子爱看的绘本&#xff0c;分享适合3-6岁孩子的绘本书…

Kindle在线推书网站 强烈推荐

俗话说得好&#xff1a;腹有诗书气自华 突然间发现自己的kindle已经吃灰好久了 有的时候还会当做泡面盖用用 但后来彻底废弃了 归结其原因还是书籍资源太少&#xff08;懒&#xff09; 因为之前找书实在太痛苦了 即使买了Amazon的Kindle Unlimited会员 依旧有找不到的书 甚是痛…

Datawhale 《南瓜书》

Datawhale 南瓜书 pumpkin-book 原书&#xff1a;机器学习 周志华 贡献者&#xff1a; Datawhale成员 欢迎任何人参与和完善&#xff1a;一个人可以走的很快&#xff0c;但是一群人却可以走的更远。 章节小节 每个chapter表示章节&#xff0c;part* 表示每个小节 pumpkin-boo…

90后在虚拟世界建国风园林,完美融合数字艺术与传统诗词

90后数字艺术家罗比(sheepmaomao)在虚拟世界中建起了一个个国风园林景象&#xff0c;如梦如幻。她对植物细致入微的观察&#xff0c;对数字技术游刃有余的运用和丰富的想象力&#xff0c;在屏幕艺术本身魅力的加持下&#xff0c;造就出令人叹为观止的作品。 罗比的数字植物柔和…

【新知实验室 TRTCIM】实时互动课堂最佳实践

【新知实验室 TRTC&IM】实时互动课堂最佳实践 一、新知实验室-TRTC腾讯云音视频产品体验官计划活动简介 二、产品简介TRTCIM 三、最佳实践3.1 官方快速上手TRTC(快速跑通)3.1.1 注册腾讯云账号3.1.2 使用实时音视频(需先开通)3.1.3 创建应用3.1.4 查看项目(查看密钥和快速上…

智慧旅游管理系统下的旅游业的发展规划

伴随着全球范围经济与文化艺术的迅速发展壮大,高新科学技术也快速的渗入了各个领域,已不再是神秘不可触碰的存在。“智慧地球”、“智慧城市”等定义的持续明确提出,宣布使高新科技融入到大家日常生活的每一个细节当中,在这样的局势下,旅游业也无可非议的要发展变成“智慧旅游”…

7-3 旅游规划

一个变化的最短路径&#xff0c;每条路都有两个参数&#xff0c;长度和收费&#xff0c;要求先求出最短的路&#xff0c;如果都是最短&#xff0c;就求出花费最少的路径。再增加一个数组&#xff0c;然后在下面的优化里面稍微修改一下就可以了&#xff0c;大体还是没变的。 #i…

基于python马蜂窝网的旅游景点推荐系统

设计出基于Python的青岛市旅游数据系统&#xff0c;主要功能包括获取各个旅游景点的数据、分析各个旅游景点的价钱、淡旺季、路线等方面&#xff0c;合理的向使用系统的人推荐适合的旅游景点。为此准备把各省市的热门景点通过数据分析再用数据统计图的方式给用户展示出来比较直…

旅行路线可视化研究与实现(Java+Android+Eclipse实现的旅游APP)

目 录 1 概论 1 1.1 研究现状 1 1.2 系统开发意义 1 1.3 系统开发背景 2 2 开发环境以及相关技术 5 2.1 Eclipse 5 2.2 Adroid 5 2.2.1 基本概念 5 2.2.2 简介 6 2.2.3 系统架构 6 2.2.4 四大组件 7 2.3 Java语言 7 2.4 SQLite 7 2.4.1 简介 7 2.4.2 架构 7 2.4.3 特点 8 2.5 F…

旅游景区管理系统(一 )旅游路线导航(MFC实现)

旅游景区管理系统 1.旅游景区导航 2.搜索最短路径 3.prim铺设电路 4.代码介绍和展示 旅游路线导航 本系列为武汉某大学课设&#xff0c;只是学习之用 功能要求&#xff1a; 算法解释&#xff1a; 使用了改进版的深度优先搜索算法&#xff0c; 改进点如下&#xff1a; 1.通…

分析万篇途牛旅游游记为你挑选最佳旅游景点

分析万篇途牛旅游游记为你挑选最佳旅游景点 数据采集分析主页面分析子页面爬虫设计主页面数据采集子页面数据采集 合并数据集 数据分析及可视化旅游热门地点TOP10驴友出行特点出行季节热门地区出行时间 随着经济发展&#xff0c;人们收入越来越高&#xff0c;可支配的资金和时间…

旅游规划(Dijkstra)

输入样例: 4 5 0 3 0 1 1 20 1 3 2 30 0 3 4 10 0 2 2 20 2 3 1 20 结尾无空行输出样例: 3 40 结尾无空行代码 #include<iostream> #define INFINITY 65535 using namespace std; int edges[505][505]; int price[505][505]; int N; void Dijkstra(int begin,int end)…