真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Laravel項目中如何實現(xiàn)Ajax上傳用戶頭像

小編給大家分享一下Laravel項目中如何實現(xiàn)Ajax上傳用戶頭像,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的關(guān)注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。

在Laravel項目中實現(xiàn)Ajax上傳用戶頭像

在編寫web程序的過程中,經(jīng)常會遇到一個經(jīng)典的文件上傳場景:上傳頭像(圖片)。基于對最好的用戶體驗的追求,寫一下之前在項目中實現(xiàn)在Laravel項目中的Ajax上傳頭像。

1.配置路由

在Laravel的routes.php中設(shè)置路由:

Route::get('/avatar/upload','UsersController@avatar');
Route::post('/avatar/upload','UsersController@avatarUpload');

2.配置控制器

UsersController.php中增加對應(yīng)的avataravatarUpload這兩個方法,前者用來渲染視圖,后者處理實際上傳的圖像文件。

 public function avatar()
    {

        return view('users.avatar');
    }

  public function avatarUpload()
    {
    //some codes to deal with upload avatar
    }

3.編寫前端代碼

這其實就是在對應(yīng)的users/文件夾的avatar.blade.php視圖文件中設(shè)置樣式,以下的HTML的各個標(biāo)簽可以根據(jù)自己的情況設(shè)置classid:


 

 {!! Form::open( [ 'url' => ['/avatar/upload/api'], 'method' => 'POST', 'id' => 'upload', 'files' => true ] ) !!} 更換新頭像   {!! Form::close() !!}

 

在js中實現(xiàn)Ajax請求,這里的Ajax借助了Jquery的第三方插件http://malsup.com/jquery/form/:

$(document).ready(function() {
            var options = {
                beforeSubmit:  showRequest,
                success:       showResponse,
                dataType: 'json'
            };
            $('#image').on('change', function(){
                $('#upload-avatar').html('正在上傳...');
                $('#upload').ajaxForm(options).submit();
            });
        });
    function showRequest() {
        $("#validation-errors").hide().empty();
        $("#output").css('display','none');
        return true;
    }

    function showResponse(response)  {
        if(response.success == false)
        {
            var responseErrors = response.errors;
            $.each(responseErrors, function(index, value)
            {
                if (value.length != 0)
                {
                    $("#validation-errors").append(''+ value +'

');                 }             });             $("#validation-errors").show();         } else {           $('#user-avatar').attr('src',response.avatar);         }     }

4.處理上傳的圖片

回到UsersController.php中的avatarUpload方法,現(xiàn)在就可以處理上傳上來的圖片了:

public function avatar()
    {
        $this->wrongTokenAjax();
        $file = Input::file('image');
        $input = array('image' => $file);
        $rules = array(
            'image' => 'image'
        );
        $validator = Validator::make($input, $rules);
        if ( $validator->fails() ) {
            return Response::json([
                'success' => false,
                'errors' => $validator->getMessageBag()->toArray()
            ]);

        }

        $destinationPath = 'uploads/';
        $filename = $file->getClientOriginalName();
        $file->move($destinationPath, $filename);
                return Response::json(
                    [
                        'success' => true,
                        'avatar' => asset($destinationPath.$filename),
                    ]
                );
            }



    }

注:在上傳之前,確認(rèn)在laravel的public/目錄下創(chuàng)建了uploads/文件夾,并給以相應(yīng)的權(quán)限,如:

sudo chmod -R 777 uploads/

在上面的avatarUpload方法中,有一個wrongTokenAjax方法,這是用來檢驗Laravel體系的token值的,同樣是在UsersController.php中添加:

 public function wrongTokenAjax()
    {
        if ( Session::token() !== Request::get('_token') ) {
            $response = [
                'status' => false,
                'errors' => 'Wrong Token',
            ];

            return Response::json($response);
        }

    }

5.最后

到這里一個簡單的Ajax上傳圖片的demo就完成了,在實際的開發(fā)中,我們還需要考慮以下幾個問題:

  1. 根據(jù)用戶的不同用戶名或者用戶id來創(chuàng)建不同的文件夾,這些都可以在avatarUpload方法中 $file->move($destinationPath, $filename)之前使用

    File::exists($username) or File::makeDirectory($username);
  2. 更新數(shù)據(jù)庫中用戶的avatar字段,大概是這樣的:在avatarUpload方法返回數(shù)據(jù)之前,使用下面的類似語句:

    $user->avatar = your_avtar_upload_path;
    
    $user->save();
  3. 如果你還想更進一步改善體驗,提供一些圖片的裁剪和添加濾鏡等功能,可以同時使用 Intervention/Image php包和Jcrop js圖片裁剪實現(xiàn),比如在:

    function showResponse(response)  {
    
    }

    中,如果成功的返回圖片,就在$('#user-avatar').attr('src',response.avatar)后執(zhí)行:

     $('#user-avatar').Jcrop({
                    aspectRatio: 1,
                    onSelect: updateCoords,
                    setSelect: [120,120,10,10]
                    });

    就可以在前端實現(xiàn)圖片裁剪,然后將相應(yīng)的裁剪數(shù)據(jù)如裁剪圖片的height,width,x-align.y-align等傳到后端處理就可以,使用Intervention/Image的話,在后端處理圖片就是輕而易舉的事情了!

以上是“Laravel項目中如何實現(xiàn)Ajax上傳用戶頭像”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享標(biāo)題:Laravel項目中如何實現(xiàn)Ajax上傳用戶頭像
標(biāo)題鏈接:http://weahome.cn/article/peodhp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部