Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.1在包含base64编码图像的AngularJS post上返回错误301_Php_Ajax_Angularjs_Post_Base64 - Fatal编程技术网

Php Laravel 5.1在包含base64编码图像的AngularJS post上返回错误301

Php Laravel 5.1在包含base64编码图像的AngularJS post上返回错误301,php,ajax,angularjs,post,base64,Php,Ajax,Angularjs,Post,Base64,救命啊,我快疯了 我使用Laravel5.1构建了一个API,我的应用程序使用AngularJS(1.4.5)与API进行通信。FabricJS插件从画布创建Base64编码的图像,我想使用AJAX post方法将其发送到Laravel post路由 我在Javascript中的帖子数据如下所示: var postData = { image: "data:image/png;base64,iVBORw0KGgoAAAA(...)", data: (some arrays and

救命啊,我快疯了

我使用Laravel5.1构建了一个API,我的应用程序使用AngularJS(1.4.5)与API进行通信。FabricJS插件从画布创建Base64编码的图像,我想使用AJAX post方法将其发送到Laravel post路由

我在Javascript中的帖子数据如下所示:

var postData = {
    image: "data:image/png;base64,iVBORw0KGgoAAAA(...)",
    data: (some arrays and objects)
var postData = {
    image: "iVBORw0KGgoAAAA(...)",
    imageType: "png",
    data: (some arrays and objects)
现在,当我发布数据时,图像数据大约是2MB。在post-to-Laravel路由(post-route,无尾随斜杠)中,Laravel返回一个永久移动的301(在Firefox 40.0.2中),在Google Chrome中,网络选项卡显示301 error,后跟error 405 Method Not Allowed,第201行Laravel的RouteCollection.php中有一个错误

Post JSON是有效的(选中),当我不发布图像数据时Post工作正常(参数设置为image: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: "data:image/png;base64,iVBORw0KGgoAAAA(...)",
    data: (some arrays and objects)
var postData = {
    image: "iVBORw0KGgoAAAA(...)",
    imageType: "png",
    data: (some arrays and objects)

使用PHP,我们重新组装整个图像字符串(如果“png”prepend“data:image/png;base64,“to image”),并且(在我们的例子中)使用干预图像插件并将图像保存到服务器上的目录中。

我在传递经过消毒的XML时遇到问题


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

我试过了。除了性能问题(通过2MB字符串挖掘)之外,我什么也没有得到,错误仍然存在……您可以使用Javascript post发送文件,然后使用类似$data=json\u decode(file\u get\u contents('s)的东西吗php://input",对),;我发布了一个适合我的解决方案。我已经重新上传了所有的图像,用以前被拒绝的各种文件进行了测试,现在可以正常工作了。。。