国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在Laravel項目中實現Ajax上傳用戶頭像

shiina / 1159人閱讀

摘要:在編寫程序的過程中,經常會遇到一個經典的文件上傳場景上傳頭像圖片?;趯ψ詈玫挠脩趔w驗的追求,寫一下之前在項目中實現在項目中的上傳頭像。

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

1.配置路由

在Laravel的routes.php中設置路由:

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

2.配置控制器

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

 public function avatar()
    {

        return view("users.avatar");
    }

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

3.編寫前端代碼

這其實就是在對應的users/文件夾的avatar.blade.php視圖文件中設置樣式,以下的HTML的各個標簽可以根據自己的情況設置classid:

< div class="avatar-upload" id="avatar-upload"> {!! Form::open( [ "url" => ["/avatar/upload/api"], "method" => "POST", "id" => "upload", "files" => true ] ) !!} {!! Form::close() !!}

在js中實現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方法,現在就可以處理上傳上來的圖片了:

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),
                    ]
                );
            }



    }
  

注:在上傳之前,確認在laravel的public/目錄下創建了uploads/文件夾,并給以相應的權限,如:

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就完成了,在實際的開發中,我們還需要考慮以下幾個問題:

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

File::exists($username) or File::makeDirectory($username);

更新數據庫中用戶的avatar字段,大概是這樣的:在avatarUpload方法返回數據之前,使用下面的類似語句:

$user->avatar = your_avtar_upload_path;

$user->save();

如果你還想更進一步改善體驗,提供一些圖片的裁剪和添加濾鏡等功能,可以同時使用 Intervention/Image php包和Jcrop js圖片裁剪實現,比如在:

function showResponse(response)  {

}

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

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

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

Happy Hacking

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21007.html

相關文章

  • JS 中實 Laravel 的 route 函數

    摘要:所以推薦給每個路由都命個名,并通過路由名的方式來獲取。所以我就考慮能不能在中實現一個類似后端的函數。最終的解決方案很簡單,兩個函數就可以搞定。 在Laravel的路由模塊里,我們可以給每一個路由設定一個名字,比如: Route::get(/blog/{blog}, BlogController@show)->name(blog.show); 然后就可以通過 route(blog.sho...

    zhangqh 評論0 收藏0
  • laravel-admin 文件上傳OSS

    摘要:前言因為項目需求,需要把圖片上傳至阿里云,我的接口和后臺項目是分開的,都使用的框架開發,接入這里就不做討論了,這里主要說一下上傳阿里的問題。 前言 因為項目需求,需要把圖片上傳至阿里云 OSS,我的 Api 接口和后臺項目是分開的,都使用的 laravel 框架開發,Api 接入 OSS 這里就不做討論了,這里主要說一下 laravel-admin 上傳阿里 OSS 的問題。 網上的一...

    darkbaby123 評論0 收藏0
  • node簡單實一個更改頭像功能

    摘要:前言一直想寫這篇文章,無奈由于要考試的原因,一直在復習,拖延到現在才寫,之前用的框架寫了個小項目,里面有個上傳圖片的功能,這里記錄一下如何實現我使用的是思路首先,當用戶點擊上傳頭像,更新頭像的時候,將頭像上傳到項目的一個文件夾里面我是存放在 前言 一直想寫這篇文章,無奈由于要考試的原因,一直在復習,拖延到現在才寫?,之前用 node 的 express 框架寫了個小項目,里面有個上傳圖...

    BlackFlagBin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<