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

PHP + Ajax: Uploading large content via Ajax (413 HTTP Code)

我在这个问题上花了 2 天时间,我已经到了绝望的地步。当我通过 Ajax 上传文件内容时,我达到了我的请求限制 - 请求实体太大。我在 Apache 服务器上。我可以修改 php.ini 和 htaccess,但无法修改除此之外的任何配置,因为我无权访问这些配置。

问题:

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

附加信息:

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

希望这些信息足够了。作为奖励 - 如果有人能解释为什么通过文件输入上传文件有效,但通过文本字段上传相同的数据却不能,那也将非常有益!

对于以后遇到类似问题的任何人,我在 this question

的答案之一中找到了答案

本质上,我们将使用以下方法将 base64 字符串作为 blob 添加到 formData 对象:

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

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