PHP + Ajax:通过Ajax上传大型内容(413 HTTP代码)

时间:2017-09-18 01:07:16

标签: php ajax apache http-status-code-413

我在这个问题上花了2天时间,我到了一个绝望点。当我通过Ajax上传文件内容时,我正在达到我的请求限制 - 请求实体太大。我在Apache服务器上。我可以修改php.ini和htaccess但是无法修改任何超出此范围的配置,因为我无法访问这些配置。

问题:

我有一个base64编码的图像内容,我需要上传到我的服务器(大小约1MB)。我尝试上传此值,结果是413错误代码。作为一项实验,我尝试使用<input type='file' />字段上传图片,该字段适用于大于1MB的图片和文件。只有当请求参数中存在数据&gt; 1MB时(例如,在输入字段中添加数据,或者将图像的base64表示添加到其中一个请求参数中),我似乎才会遇到413错误。使用文件输入上传相同的文件工作正常。 真正的问题是在我的网站上我无法让用户通过文件输入字段上传图片。我只有需要上传的图像的base64内容。鉴于我无法修改我的服务器设置,有没有办法将这些内容上传到我的服务器?

其他信息:

我正在使用JS FormData()对象。我的表单内容进入此对象并上传到我的服务器。我可以使用formdata.append()等方法为此对象动态添加值。

  • 如果我从上面的描述追加大的base64字符串,我遇到了413错误。
  • 如果我在表单中添加一个文本字段并将base64字符串复制/粘贴到输入字段中,我也会遇到413错误
  • 如果我使用<input type='file' />字段从我的计算机上传相同的图片并上传FormData对象,则图片会很好。

希望这是足够的信息。作为奖励 - 如果有人能够解释为什么通过文件输入上传文件的工作原理,但通过文本字段上传相同的数据并不是非常有益的!

1 个答案:

答案 0 :(得分:1)

对于将来遇到类似问题的人,我在this question

的答案中找到了答案。

基本上我们将使用以下命令将base64字符串作为blob添加到formData对象:

var formData = new FormData();
var blob = new Blob(['Lorem ipsum'], { type: 'plain/text' });
formData.append('file', blob,'readme.txt');

这似乎模仿了文件输入的行为。