0

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

问题:

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

附加信息:

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

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

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

4

1 回答 1

1

对于将来遇到类似问题的任何人,我在这个问题的答案之一中找到了答案

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

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

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

于 2017-09-18T02:10:01.900 回答