我在页面welcome.blade.php javascript cropbox上连接了截断图像。点击按钮后,我得到像数据一样的字符串:image / png; base64,ivBOrwqnmdIo ............................... .................................................. ........
我写的函数是用ajax sendAvatar(img)发送并添加到klick事件的底部
$('#btnCrop').on('click', function(){
var img = cropper.getDataURL();
sendAvatar(img);
})
接下来我尝试使用ajax发送到我的web.php
function sendAvatar(img){
var url = '{{ URL::to('getavatar') }}';
var token = '{!! csrf_token() !!}';
$.ajax({
method: 'POST',
url: url,
data: {_token: token, img: img},
success: function(){
alert(img);
}
});
}
我有一个带有字段avatar_url的模型Avatar.php
class Avatar extends Model
{
protected $fillable=['id','avatar_url'];
}
现在我尝试在我的web.php中存储我的数据库中的图像
但我不知道该怎么做。请帮帮我
我正在使用laravel 5.4
答案 0 :(得分:1)
就我而言,我使用了这种方法
在我的web.php中
Route::post('/getavatar', 'AvatarController@saveAvatar');
在我的AvatarController中
use App\Avatar;
use Auth;
class AvatarController extends Controller
{
public function saveAvatar(Request $request)
{
$data = $request->get('img');
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
$avatar_owner = Auth::user()->id;
$avatarName = rand(000000000, 999999999) . '-' . $avatar_owner .'.png';
$avatar_uri = file_put_contents(public_path() . '/images/' . $avatarName, $data);
$avatar = new Avatar();
$avatar->avatar_url = $avatarName;
$avatar->save();
}
}
答案 1 :(得分:0)
您发送到服务器的img字段采用字符串格式并编码为base64
。你应该通过像this之类的php代码将base64
字符串转换为二进制格式;然后存储二进制文件,然后将二进制文件的路径放在数据库中。
答案 2 :(得分:0)
cropper.getDataURL(); < - 这会返回 base_64 数据,因此您需要使用php将此数据存储到文件中
这里是php代码示例如何做到这一点
在您的控制器中执行此操作并在数据库中存储 $ logoName
$logoName = null;
if( isset($_POST['imagebase64']) and strlen($_POST['imagebase64']) > 700 )
{
$data = $_POST['imagebase64'];
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
$logoName = rand(000000000, 999999999) . '.png';
file_put_contents(public_path() . '/some_path/' . $logoName, $data);
}