2017-09-19 103 views
2

我从那里构建了一个映像裁剪工具,我想将该base64映像存储到服务器。我通过Ajax发送了它。图像以jpg格式存储,但问题是已损坏。任何人都可以建议我可以解决什么问题?通过ajax发送base64映像到服务器

这里是我的Ajax调用:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
$.ajax({ 
    method: 'post', 
    url: 'updateProfilePicture', 
    cache: false, 
    contentType: "application/json; charset=utf-8", 
    data: {'image': encodeURIComponent(profileImageUrl)}, 
    success: function (data) { 
     alert(data); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 

    } 
}); 

这里是转换的base64正常图像控制器和存储到服务器:

public function updateProfile(Request $request) 
{ 
    $base64img = str_replace('data:image/jpeg;base64,', '', $request->Input(['image'])); 
    $data = base64_decode($base64img); 
    $file = public_path() . '/users/' .'123123123.jpg'; 
    file_put_contents($file, $data); 
    return \Response::json($data); 
}  
+0

“损坏”是什么意思? – BenRoob

+0

当我点击图片说'我们无法打开这个文件'。 – Hola

+0

为什么在客户端和服务器中使用不同的内容类型? – jrook

回答

2

您还没有发送JSON所以不要要求你正在发送JSON。删除这个。

contentType: "application/json; charset=utf-8", 

你传递一个对象data

data: {'image': encodeURIComponent(profileImageUrl)} 

当你传递一个对象,jQuery将其编码为形式的URL编码数据。

通过运行您的代码通过encodeURIComponent您导致数据为编码。

不要这样做。

data: {'image': profileImageUrl } 
+0

删除'encodeURIComponent'后,它显示'InvalidArgumentException 格式错误的UTF-8字符,可能编码错误#错误 – Hola

+2

@Hola - 听起来像是图像数据的生成问题。虽然你没有向我们展示函数的输入,所以很难说。 – Quentin

+0

https://pastebin.com/APDpaRZm 这里是完整的Js文件 – Hola

相关问题