使用PUT而不是POST上传文件的PHP方法

6

我在PHP文档上看到了一些关于这个问题的内容,但对我来说不是很清楚:

  1. 最常用的浏览器(IE、FF、Chrome、Safari、Opera等)是否支持使用PUT方法上传文件?

  2. 我应该编写什么HTML代码来使浏览器通过PUT请求调用服务器?我的意思是,我需要编写一个带有文件字段的FORM,并将属性method="POST"替换为method="PUT"吗?

  3. 在PHP文档中(上面的链接),他们说当上传文件时,PUT请求比POST请求简单得多,除了这个优点,PUTPOST相比还有哪些优缺点?


在我看来,这并不是一个重复的问题,这个问题特别涉及到在文件上传中使用该方法。 - Pekka
4个回答

6

在<form>中无法使用PUT方法。 MSIE根本不支持用户GUI。 但是,您可以使用XMLHttpRequest。它似乎已在标准和WHATWG / HTML5中定义。我的浏览器(Opera)显然很喜欢它。

http://old.mnot.net/javascript/xmlhttprequest/ IE也可能有效,因为短暂的谷歌搜索建议。而Firefox看起来很好。未检查Chrome或Webkit。

服务器端需要一个特别指定的脚本来处理传入的PUT请求。查看Apache文档。通常可以使用mod_rewrite规则。 PUT的一般优点是不需要文件编码/封送成multipart / * mime类型。理论上,这允许更可靠地上传较大的文件。虽然如果您使用PHP,则帮助不大。它适用于具有WebDAV支持和/或直接文件系统写入访问权限的Web服务器。(如果使用Apache,则可以自己保存上传的文件。)


1

我认为这种方法受到大多数主流浏览器的支持,但你无法考虑到每个存在的浏览器和其他客户端。从对用户贡献笔记的粗略查看来看,有时甚至需要服务器端配置才能正常工作。

此外,处理任何想要与文件一起发送的附加表单值变得更加困难。

我不会使用它。实际获益很少,而可能出现的麻烦太多了。


感谢您的建议。在 PHP 网站上,有一个社区评论,详细解释了如何在服务器上完成它,看起来并不需要太大的努力,只需要稍微设置一下 .htaccess 文件即可。评论者遗漏的是如何在客户端浏览器上完成它。 - Marco Demaio
@Marco,在客户端,它应该是一个简单的<form method='PUT'>。(更新:根据@Mario的说法,这还不够。请查看他的答案。)但正如我所说,虽然主要浏览器支持它,但许多客户端库、组件、奇特的浏览器和其他客户端可能不支持。 - Pekka

0

PUT 很少用于此目的,而且只有主要浏览器支持它,这使得它在此处无法使用。


-1

PUT在浏览器中的支持并不广泛,通常也不用于交互式HTML表单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接