Me he conectado en la página welcome.blade.php javascript cropbox que trunca la imagen. Después de hacer clic en el botón Recortar, obtengo la cadena como data:image/png;base64,ivBOrwqnmdIo................................. .................................................... ........
Escribo mi función para enviar con ajax sendAvatar (img) y la agrego al final del evento klick
$('#btnCrop').on('click', function(){ var img = cropper.getDataURL(); sendAvatar(img); })Luego trato de enviar a mi web.php con ajax
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); } }); }Tengo un modelo Avatar.php con campo avatar_url
class Avatar extends Model { protected $fillable=['id','avatar_url']; }Ahora intento en mi web.php almacenar la imagen en mi base de datos
Pero no sé cómo hacer esto. por favor, ayúdame
estoy usando laravel 5.4
En mi caso utilicé este enfoque.
En mi web.php
Route::post('/getavatar', 'AvatarController@saveAvatar');En mi 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(); }}
El campo img que envía al servidor está en formato de cadena y codificado como base64 . debe convertir la cadena base64 a formato binario a través de un código php como este ; luego almacene el archivo binario y luego coloque la ruta del archivo binario en la base de datos.
recortador.getDataURL(); <-- esto devuelve datos base_64 , por lo que debe almacenar estos datos en un archivo usando php
aquí hay una muestra de código php de cómo hacer esto
haga esto en su controlador y almacene $ logoName en su base de datos
$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); }