通过ajax将base64映像发送到服务器

时间:2017-09-19 08:51:39

标签: javascript php ajax laravel base64

我已经构建了一个图像裁剪工具,我想将base64图像存储到服务器。我已经通过Ajax发送了它。图像以jpg格式存储。但问题是它已损坏。谁能告诉我什么可能是解决方案?

这是我的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);
}     

1 个答案:

答案 0 :(得分:2)

您没有发送JSON,所以不要声称您正在发送JSON。删除它。

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

您正在将对象传递给data

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

传递对象时,jQuery会将其编码为表单URL编码数据。

通过encodeURIComponent运行代码会导致数据双重编码。

不要那样做。

data: {'image': profileImageUrl }