在Laravel项目中实现Ajax上传用户头像
在编写web程序的过程中,经常会遇到一个经典的文件上传场景:上传头像(图片)。基于对最好的用户体验的追求,写一下之前在项目中实现在Laravel项目中的 1.配置路由在Laravel的 Route::get('/avatar/upload','UsersController@avatar'); Route::post('/avatar/upload','UsersController@avatarUpload'); 2.配置控制器在 public function avatar() { return view('users.avatar'); } public function avatarUpload() { //some codes to deal with upload avatar } 3.编写前端代码这其实就是在对应的 <header class="profile-header"> <img id="user-avatar" src="https://wt-prj.oss.aliyuncs.com/0d06af79c49d4e08abb1ab3f7ab6e860/772c684b-10a4-43cf-8eec-dda9e28a5a23.png"> <div id="validation-errors"></div> < div 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() !!} <div class="span5"> <div id="output" style="display:none"> </div> </div> <span id="filename"></span> </header> 在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('<div class="alert alert-error"><strong>'+ value +'</strong><div>'); } }); $("#validation-errors").show(); } else { $('#user-avatar').attr('src',response.avatar); } } 4.处理上传的图片回到 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),] ); } }
sudo chmod -R 777 uploads/ 在上面的 public function wrongTokenAjax() { if ( Session::token() !== Request::get('_token') ) { $response = [ 'status' => false,'errors' => 'Wrong Token',]; return Response::json($response); } } 5.最后到这里一个简单的
Happy Hacking (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |