相关文章推荐
害羞的篮球  ·  万古神王(动画)_百度百科·  1 年前    · 
安静的香烟  ·  南开情结六十载——苏学同(数学系1951级)·  1 年前    · 
另类的爆米花  ·  【任游玩】最后1天的等待!怪物猎人们,准备好 ...·  1 年前    · 
没有腹肌的电影票  ·  解析雪铁龙天逸 C5 ...·  1 年前    · 
坐怀不乱的大葱  ·  《姜子牙》百度云网盘电影-在线观看-超清BD ...·  2 年前    · 
Code  ›  http - 上传文件用PUT还是POST? -
https://segmentfault.com/q/1010000043357145
千杯不醉的脆皮肠
1 年前
segmentfault segmentfault
注册登录
问答 博客 标签 活动
发现
✓ 使用“Bing”搜本站 使用“Google”搜本站 使用“百度”搜本站 站内搜索
注册登录
  1. 首页
  2. 问答
  3. http
  4. 问答详情

上传文件用PUT还是POST?

头像
从君华
136 8 54
发布于
1 月 27 日
上海

MDN 的 Fetch示例 里面单个文件上传用了 PUT ,多个文件上传用了 POST 。
image.png

所以文件上传究竟用 PUT 还是 POST ?

http put post
阅读 2.9k
4 个回答
得票 最新
头像
ponponon
2.9k 12 252 1050
发布于
1 月 27 日
浙江
✓ 已被采纳

上传文件不存在选 POST 还是 PUT 的问题


POST 表示新增

PUT 表示修改

你的截图里面说的很清楚,PUT 是修改头像,POST 是发表新文章

头像
唯一丶
21.1k 16 60 64
发布于
1 月 28 日
台湾

不要在不适合的地方,强行套用 RESTful,并不是所有的接口都可以 RESTful 化。

对于文件上传,大部分情况下应当还是使用 POST 的方式,尤其是上面代码里面示例中同时有表单和文件的情况。


除了发送还应当考虑服务端接收,以 PHP 为例,如果你使用 POST 上传文件的方式,那么你在后端是可以直接使用 $_FILES 来获取上传好的文件信息进行处理,但是如果你使用 PUT ,就需要你自己去获取原始请求体进行解析,请求提就有可能是一个 multipart/form-data 、也有可能是 application/x-www-form-urlencoded ,对于后端开发来说并不是那么的妙。

除此之外,虽然在 RESTful 中,对于 PUT 的定义是全量更新。而在其他的一些常见,对于文件而言,PUT 更有写入的意思,也就是常见的 对象存储(OSS) 对于这类业务来说, PUT 就可以被认为是要写入一个文件,整个请求体中,就只有文件的原始内容。


在业务中, 对于文件上传的处理,大多数时候,都是提供一个单独的文件上传接口进行上传,所有的上传都是通过这一个接口来完成。在文件上传完成后,接口返回文件的下载地址或者一个ID,用于存储,这样也更加便于统一管理上传资源,而不是担心某天在哪个接口突然又加了一个文件上传,为了这种情况又去修改那个接口的代码。

头像
Feng_Yu
11.9k 10 38 62
发布于
1 月 28 日
陕西
更新于
1 月 28 日

你要你愿意,你甚至可以用 GET 请求上传文件,因为怎么处理请求完全是后端行为。

不过尽可能符合HTTP语义是约定俗成的行为,不管你用不用REST风格。

按照HTTP语义, GET 请求应该是读取服务器资源, PUT 请求和 POST 请求应该都是修改服务器资源,并且 GET 和 PUT 应该是幂等操作,而 POST 不保证幂等性。

按照这个大原则去设计即可。

头像
菜鸡老刘
43 14
发布于
1 月 27 日
浙江

使用POST就可以

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
被 1 篇内容引用
  • 头像
    SegmentFault 2023 年社区周报 Vol.4
    1
推荐问题
  • http和https的区别?
    比如,我现在有一个纯的静态页面,就是做信息展示,就是我们说的marketing site,这里面也没有什么ajax请求啥的,是不是就http/https从安全角度就没有区别了????

    7 回答 2.1k 阅读 ✓ 已解决

  • axios 如何全局处理抛出的异常?
    虽然已经在响应拦截器里做了一些全局处理,最后是通过 Promise.reject 抛出的异常现在每个接口请求方法都还是得写 try/catch 或者 .catch() 真的好麻烦有什么比较好的方案吗?

    10 回答 2.7k 阅读

  • 一个奇怪的站点,如何判断一个网站请求是否响应完毕?
    或者点击此处该站点如果通过浏览器去访问则会一直在加载中,直到超时。但是浏览器会正常展示页面信息。小弟想知道如何来实现这类网站的原理。请各位大大帮忙分析一下这类请求。这里不涉及这个网站为什么会被拦截,请勿回复这个。我需要知道是为什么这个网站会一直加载,但是页面展示正常。以及如何来通过chrome扩展来判...

    2 回答 1.9k 阅读 ✓ 已解决

  • 什么鬼 突然不能访问https服务了
    下午刚下的ssl证书 用nginx将服务反向代理 使用https证书回家前还可以访问的 回家后就瞬间爆炸了试了下nginx的服务 是正常的http请求也可以不知道为啥突然炸了 页面一直访问不到看了一下 唯一的区别就是这个小圈圈里面的证书没了之前记得是有个证书的不知道是不是这个原因

    1 回答 2.6k 阅读 ✓ 已解决

  • POST 请求报 302 重定向状态码,出现跨域问题,如何解决?
    题目描述最近刚学了跨域,就想着使用 API, Get 请求,JSONP 我基本上没啥问题,就是 post 请求有点我请求的是 [链接] 提供的 API 文档技术栈:nodejs,ajax 请求遇到的问题:POST请求 返回重定向302 跨域请求问题请求接口: {代码...} 请求示例: {代码...} 返回值: {代码...} 题目来源及自己的思路一个按钮用于提交 p...

    2 回答 1.2k 阅读 ✓ 已解决

  • Java后端对http中的post、put、get、delete接收参数?
    最近接触到了RESTful API,其定义了post、put、get、delete四大方法分别对应于后端的增删改查,由于之前一直是使用postmapping与getmapping去通过逻辑完成增删改查,故一直认为postmapping的请求参数通过 body 体获取,getmapping通过url后面的?xxx=yyy或者url/yy获取,而对put、delete知之甚少

    2 回答 1.2k 阅读 ✓ 已解决

  • 是否可以做到:只跳转aaa.html的内容展示到新的页面,但是aaa.html这个URL地址并不改变?
    我们知道HTTP有301, 302, 307 等等的web跳转功能:我们是否可以做到:我们在[链接]只跳转aaa.html的内容展示到新的页面,但是aaa.html这个URL地址并不改变?

    1 回答 1k 阅读 ✓ 已解决

宣传栏
产品
热门问答
热门博客
热门课程
最新活动
翻译
勋章
课程
Java 开发课程
PHP 开发课程
Python 开发课程
前端开发课程
移动开发课程
资源
每周精选
用户排行榜
帮助中心
建议反馈
合作
关于我们
广告投放
职位发布
讲师招募
联系我们
合作伙伴
关注
产品技术日志
社区运营日志
市场运营日志
团队日志
社区访谈
条款
服务协议
隐私政策
下载 App

Copyright © 2011- 2023 SegmentFault. 当前呈现版本 23.09.15

浙ICP备15005796号-2 浙公网安备33010602002000号 ICP 经营许可 浙B2-20201554

杭州堆栈科技有限公司版权所有

 
推荐文章
害羞的篮球  ·  万古神王(动画)_百度百科
1 年前
安静的香烟  ·  南开情结六十载——苏学同(数学系1951级)
1 年前
另类的爆米花  ·  【任游玩】最后1天的等待!怪物猎人们,准备好狩猎了吗? - 知乎
1 年前
没有腹肌的电影票  ·  解析雪铁龙天逸 C5 AIRCROSS插混:每月养车大约要花1400元|天逸 c5 aircross|新车|phev_网易订阅
1 年前
坐怀不乱的大葱  ·  《姜子牙》百度云网盘电影-在线观看-超清BD1080P|国语中字(2020)_人人电影网,百度云盘,阿里网盘下载
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号