解决错误 413 请求实体太大

Posted

技术标签:

【中文标题】解决错误 413 请求实体太大【英文标题】:Work around Error 413 request entity too large 【发布时间】:2017-03-05 20:46:16 【问题描述】:

我正在从事的项目允许我们的员工将大文件上传到我们的共享主机并获取下载链接。问题是我们的主机拒绝更改共享主机的 LimitRequestBody。是否有任何其他解决方案可以解决 LimitRequestBody 或任何其他方式来完成这项工作?

【问题讨论】:

你尝试了吗?我认为您可以将数据分成几部分并在上传之前对其进行压缩?! @Fky 我为我们的员工做这个项目可以在不需要我的情况下更新数据,我现在要做的是打开我的主机 ftp 并上传文件。但我需要做脚本来上传这些数据而不需要我,它已经适用于 是的,但是您的脚本可以在您的 ftp 服务器上运行并在上传前拆分数据 + 压缩它 可以给我看个例子吗? 您能否将文件上传到第三方文件托管服务,例如 dropbox 或 Rackspace CloudFiles 或 Amazon S3? 【参考方案1】:

您可以覆盖 upload_max_filesizepost_max_size 的默认值。这两个 ini 设置都具有更改模式为 PHP_INI_PERDIR 这意味着您可以使用以下之一

php.ini、.htaccess、httpd.conf、.user.ini

由于您使用的是共享主机,因此最合适的选项是 .htaccess.user.ini

您可以参考这个来使用 htaccess 设置值 Set php Ini settings using htaccess

【讨论】:

这值得一试,但如果可行,您应该更换托管服务提供商。任何允许客户使用.htaccessini_set 等来覆盖他们明确拒绝的内容的共享托管服务提供商都是您应该立即离开的托管服务提供商,因为其他客户会点击,发现其他漏洞并很快滥用服务并使用它关闭您的网站。一个好的共享主机提供商还会阻止您覆盖他们想要控制您的资源使用的全局设置。 我已经更改了 php 设置,但 LimitRequestBody 它是 Apache 设置,我尝试更改 .hraccess 中的限制但不起作用,并且我的主机拒绝更改它。我测试了我认为是 100MB 的限制,但我需要将其设为 200MB @SamirNabil 200 MB 听起来很大。这些是什么类型的文件?就是想。您确定底层流程本身有意义吗? 如果我没记错的话,这些 PHP 设置只有在 apache 允许请求时才会起作用。 LimitRequestBody 甚至在它们发挥作用之前就已经生效。 @curious_cat 是的,它是巨大的,但我们的招标部门发送大量数据,我们通常使用其他服务,如 wetransfer 等,但我们需要一些私有的数据来保护数据。【参考方案2】:

实现它的两种方法,手动块上传或工具。

您可以使用Real Ajax Uploader 工具。它可以与 html5 一起使用,文件的上传是分块完成的,对服务器的性能和健壮性要求很小。

或手动将文件拆分为多个块,然后逐个上传。您可以使用 7-zip 拆分文件和合并文件。这是tutorial。

对于客户端拆分,您还可以参考File uploads; How to utilize "chunking"?

服务器块合并可以参考Handling plupload's chunked uploads on the server-side和http://www.phpclasses.org/package/8858-PHP-Create-and-merge-Zip-archives-split-in-parts.html

希望对你有帮助。

【讨论】:

以上是关于解决错误 413 请求实体太大的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab错误推送文件413请求实体太大

WCF:远程服务器返回错误:(413)请求实体太大[重复]

413请求实体太大

防止 ASP.NET 中的 413 错误请求实体太大 [重复]

在播放框架中上传表单错误 413 请求实体太大

Gmail API 导入 - 错误 413 请求实体太大