上传文件用PUT还是POST?

MDNFetch示例里面单个文件上传用了PUT,多个文件上传用了POST
image.png

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

阅读 5.5k
4 个回答

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


POST 表示新增

PUT 表示修改

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

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

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


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

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


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

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

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

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

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

使用POST就可以

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏