Inhaltsverzeichnis
1. Konfigurieren Sie das Routing
2. Konfigurieren Sie den Controller
1.配置路由
2.配置控制器
3.编写前端代码
4.处理上传的图片
5.最后
3. Schreiben Sie den Frontend-Code
4. Hochgeladene Bilder verarbeiten
5
Heim PHP-Framework Laravel Ausführliche Erklärung zur Implementierung von Ajax zum Hochladen von Benutzeravataren in Laravel-Projekten

Ausführliche Erklärung zur Implementierung von Ajax zum Hochladen von Benutzeravataren in Laravel-Projekten

Feb 17, 2021 am 10:14 AM
laravel

Beim Schreiben von Webprogrammen stoßen wir häufig auf ein klassisches Datei-Upload-Szenario: das Hochladen von Avataren (Bildern). Basierend auf dem Streben nach der besten Benutzererfahrung möchte ich über den zuvor im Laravel-Projekt implementierten Ajax-Upload-Avatar schreiben.

1. Konfigurieren Sie das Routing

Legen Sie das Routing in Laravels routes.php fest:
Route::get('/avatar/upload','UsersController@avatar');
Route::post('/avatar/upload','UsersController@avatarUpload');
Nach dem Login kopieren

2. Konfigurieren Sie den Controller

Fügen Sie in UsersController das entsprechende hinzu <code>avatar- und avatarUpload-Methoden in .php Ersteres wird zum Rendern der Ansicht verwendet, und letzteres verarbeitet die tatsächlich hochgeladene Bilddatei. Ajax上传头像。

1.配置路由

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

 public function avatar()
    {

        return view('users.avatar');
    }

  public function avatarUpload()
    {
    //some codes to deal with upload avatar
    }
Nach dem Login kopieren

2.配置控制器

UsersController.php中增加对应的avataravatarUpload这两个方法,前者用来渲染视图,后者处理实际上传的图像文件。

<header class="profile-header">
 <img id="user-avatar" src="https://wt-prj.oss.aliyuncs.com/0d06af79c49d4e08abb1ab3f7ab6e860/772c684b-10a4-43cf-8eec-dda9e28a5a23.png">

<p id="validation-errors"></p>

<p class="avatar-upload" id="avatar-upload">
 {!! Form::open( [ 'url' => ['/avatar/upload/api'], 'method' => 'POST', 'id' => 'upload', 'files' => true ] ) !!}
<a href="#" class="btn button-change-profile-picture">
<label for="upload-profile-picture">
<span id="upload-avatar">更换新头像</span>
 <input name="image" id="image" type="file" class="manual-file-chooser js-manual-file-chooser js-avatar-field">
</label>
</a>
{!! Form::close() !!}


<p class="span5">
<p id="output" style="display:none">
</p>
</p>


<span id="filename"></span>
 </header>
Nach dem Login kopieren

3.编写前端代码

这其实就是在对应的users/文件夹的avatar.blade.php视图文件中设置样式,以下的HTML的各个标签可以根据自己的情况设置classid:

$(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('<p class="alert alert-error"><strong>'+ value +'</strong><p>');
                }
            });
            $("#validation-errors").show();
        } else {

          $('#user-avatar').attr('src',response.avatar);

        }
    }
Nach dem Login kopieren

在js中实现Ajax请求,这里的Ajax借助了Jquery的第三方插件http://malsup.com/jquery/form/:

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



    }
Nach dem Login kopieren

4.处理上传的图片

回到UsersController.php中的avatarUpload方法,现在就可以处理上传上来的图片了:

sudo chmod -R 777 uploads/
Nach dem Login kopieren

注:在上传之前,确认在laravel的public/目录下创建了uploads/文件夹,并给以相应的权限,如:

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

            return Response::json($response);
        }

    }
Nach dem Login kopieren

在上面的avatarUpload方法中,有一个wrongTokenAjax方法,这是用来检验Laravel体系的token值的,同样是在UsersController.php中添加:

File::exists($username) or File::makeDirectory($username);
Nach dem Login kopieren

5.最后

到这里一个简单的Ajax上传图片的demo就完成了,在实际的开发中,我们还需要考虑以下几个问题:

  1. 根据用户的不同用户名或者用户id来创建不同的文件夹,这些都可以在avatarUpload方法中 $file->move($destinationPath, $filename)之前使用

    $user->avatar = your_avtar_upload_path;
    
    $user->save();
    Nach dem Login kopieren
  2. 更新数据库中用户的avatar字段,大概是这样的:在avatarUpload方法返回数据之前,使用下面的类似语句:

    function showResponse(response)  {
    
    }
    Nach dem Login kopieren
  3. 如果你还想更进一步改善体验,提供一些图片的裁剪和添加滤镜等功能,可以同时使用 Intervention/Image php包和Jcrop js图片裁剪实现,比如在:

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

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

    rrreee

    就可以在前端实现图片裁剪,然后将相应的裁剪数据如裁剪图片的height,width,x-align.y-alignrrreee

    3. Schreiben Sie den Frontend-Code

    Damit wird tatsächlich der Stil in der Ansichtsdatei avatar.blade.php im entsprechenden users/festgelegt > Ordner, jedes Tag des folgenden HTML kann class und id entsprechend Ihrer eigenen Situation festlegen:
  4. rrreee
implementiert Ajax-Anfragen in js. Das Ajax verwendet hier den Drittanbieter des Jquery-Plug-ins http://malsup.com/jquery/form/:
rrreee

4. Hochgeladene Bilder verarbeiten

🎜Zurück zu avatarUpload in <code>UsersController.php Mit der Methode code> code> können Sie nun das hochgeladene Bild verarbeiten: 🎜rrreee<blockquote>🎜Hinweis: Stellen Sie vor dem Hochladen sicher, dass <code>uploads/ im Verzeichnis public/ von Laravel erstellt wurde code>-Ordner und erteilen Sie entsprechende Berechtigungen, wie zum Beispiel: 🎜rrreee🎜In der obigen avatarUpload-Methode gibt es eine wrongTokenAjax-Methode, die zum Überprüfen des verwendet wird token-Wert des Laravel-Systems, fügen Sie auch UsersController.php hinzu: 🎜rrreee

5

🎜Hier ist eine einfache Demo von Ajax Das Hochladen von Bildern ist abgeschlossen. In der tatsächlichen Entwicklung müssen wir noch die folgenden Probleme berücksichtigen: 🎜
  1. 🎜Erstellen Sie verschiedene Ordner entsprechend dem Benutzernamen oder der Benutzer-ID. Diese können zuvor verwendet werden $file->move($destinationPath, $filename) in der Methode avatarUpload 🎜rrreee🎜
  2. 🎜 zum Aktualisieren der Datenbank Der Avatar des Benutzers Das Feld „code>“ sieht folgendermaßen aus: Bevor die Methode „<code>avatarUpload“ Daten zurückgibt, verwenden Sie eine ähnliche Anweisung unten: Funktionen zum Hinzufügen von Filtern können Sie gleichzeitig mit dem PHP-Paket „Intervention/Image“ und dem js-Bildzuschnitt verwenden: 🎜rrreee🎜, wenn das Bild erfolgreich zurückgegeben wurde, einfach in $('#user- avatar').attr('src',response.avatar)Nach der Ausführung von: 🎜rrreee🎜 können Sie das Bildzuschneiden im Frontend implementieren und dann die entsprechenden Zuschneidedaten als height,width,x-align.y-align können mithilfe von Intervention/Image zur Verarbeitung an das Backend übergeben werden Dann ist die Bildverarbeitung im Backend ein Kinderspiel! 🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zur Implementierung von Ajax zum Hochladen von Benutzeravataren in Laravel-Projekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Jun 01, 2024 pm 01:34 PM

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Jun 04, 2024 pm 05:29 PM

Für kleine Projekte eignet sich Laravel, für größere Projekte, die starke Funktionalität und Sicherheit erfordern. CodeIgniter eignet sich für sehr kleine Projekte, die geringes Gewicht und Benutzerfreundlichkeit erfordern.

Welche ist die bessere Template-Engine, Laravel oder CodeIgniter? Welche ist die bessere Template-Engine, Laravel oder CodeIgniter? Jun 03, 2024 am 11:30 AM

Vergleichen Sie Laravel's Blade und die Twig-Vorlagen-Engine von CodeIgniter und wählen Sie je nach Projektanforderungen und persönlichen Vorlieben: Blade basiert auf der MVC-Syntax, die eine gute Codeorganisation und Vorlagenvererbung fördert. Twig ist eine Bibliothek eines Drittanbieters, die flexible Syntax, leistungsstarke Filter, erweiterten Support und eine Sicherheits-Sandbox bietet.

Laravel – Paginierungsanpassungen Laravel – Paginierungsanpassungen Aug 27, 2024 am 10:51 AM

Laravel – Paginierungsanpassungen – Laravel enthält eine Paginierungsfunktion, die einem Benutzer oder Entwickler hilft, eine Paginierungsfunktion einzubinden. Der Laravel-Paginator ist in den Abfrage-Builder und Eloquent ORM integriert. Die Paginierungsmethode automatisch

See all articles