Php Laravel 5.1在包含base64编码图像的AngularJS post上返回错误301
救命啊,我快疯了 我使用Laravel5.1构建了一个API,我的应用程序使用AngularJS(1.4.5)与API进行通信。FabricJS插件从画布创建Base64编码的图像,我想使用AJAX post方法将其发送到Laravel post路由 我在Javascript中的帖子数据如下所示: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
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",对),;我发布了一个适合我的解决方案。我已经重新上传了所有的图像,用以前被拒绝的各种文件进行了测试,现在可以正常工作了。。。