2015-09-16 30 views
0

帮助,因为我正在失去主意。Laravel 5.1在包含base64编码图像的AngularJS post上返回301错误

我使用Laravel 5.1构建了一个API,并且我的应用程序使用了与API通信的AngularJS(1.4.5)。 FabricJS插件从画布创建Base64编码图像,并且我想使用AJAX 方法将其发送到Laravel后路线。在Javascript

我交的数据看起来是这样的:

var postData = { 
    image: "data:image/png;base64,iVBORw0KGgoAAAA(...)", 
    data: (some arrays and objects) 

现在,当我发布的数据,这是约2 MB与图像数据。在发布到Laravel路径(发布路径,无尾随斜线)后,Laravel会返回一个301 Moved Permanently(在Firefox 40.0.2中),而在Google Chrome中,网络选项卡会显示301错误,然后出现错误405 Method Not Allowed with Laravel's RouteCollection.php在线201.

发布JSON是有效的(选中),并发布工作正常,当我没有发布图像数据(参数设置为图像:null)。

服务器PHP版本是5.6.12。

当我上传大型JPEG文件(如压缩100或98)时,看起来似乎得到输出错误。 PHP设置说我的上传限制是20MB。

另一方面,当图像是JPEG,全高清,从Photoshop保存为Web保存时,该相同的文章将起作用...,启用了渐进选项的压缩80。

替代方法

的同事和我想这和它的工作对我们来说:出于某种原因,Laravel不完整的图像数据作为一个字符串,例如:

data:image/png;base64,iVBORw0KGgoAAAA(...) 

解决方案是将其分解为实际的base64编码字符串(在本例中为iVBORw0KGgoAAAA(...))和第一部分,并将文件类型作为另一个参数传递。

所以Javascript对象(从后上方)将是这样的:

var postData = { 
    image: "iVBORw0KGgoAAAA(...)", 
    imageType: "png", 
    data: (some arrays and objects) 

使用PHP,我们重组整个图像的字符串(如 “PNG” 前面加上“数据:图像/ PNG;的base64 ,“图像)和(在我们的例子中)使用干预图像插件并将图像保存到服务器上的目录中。

回答

0

我有一个问题通过消毒的XML。

尝试在查询字符串中传递字符串,然后str_replace('','+',$ base64string);

+0

试过了。除了性能问题(通过2 MB字符串挖掘),我没有得到它,错误仍然存​​在... –

+0

你可以用Javascript发送文件后,然后使用类似 $ data = json_decode(file_get_contents('php :// input'),true); –

+0

我发布了一个适用于我的解决方法。我已经重做了所有的图片上传,并使用之前被拒绝的各种文件进行了测试,现在它可以正常工作...... –