如何使用ajax在laravel 5.4中保存图像网址和图像?

时间:2017-03-05 12:14:23

标签: ajax image laravel

我在页面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

3 个答案:

答案 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);

    }