Laravel 5.1 Ajax上传图片方法

前端之家收集整理的这篇文章主要介绍了Laravel 5.1 Ajax上传图片方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近在做的项目基于Laravel 5.1开发,需要用到Ajax上传,查了些资料,自己整理了下可用的方法

控制器:

UploadController.PHP

  1. <?PHP
  2.  
  3. namespace App\Http\Controllers\Admin;
  4.  
  5. use App\Http\Requests;
  6. use App\Http\Controllers\Controller;
  7. use YuanChao\Editor\EndaEditor;
  8. use Redirect,Input,Response;
  9.  
  10. class UploadController extends Controller
  11. {
  12.  
  13. //Ajax上传图片
  14. public function imgUpload()
  15. {
  16. $file = Input::file('file');
  17. $id = Input::get('id');
  18. $allowed_extensions = ["png","jpg","gif"];
  19. if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(),$allowed_extensions)) {
  20. return ['error' => 'You may only upload png,jpg or gif.'];
  21. }
  22.  
  23. $destinationPath = 'uploads/images/';
  24. $extension = $file->getClientOriginalExtension();
  25. $fileName = str_random(10).'.'.$extension;
  26. $file->move($destinationPath,$fileName);
  27. return Response::json(
  28. [
  29. 'success' => true,'pic' => asset($destinationPath.$fileName),'id' => $id
  30. ]
  31. );
  32. }
  33. }

模板:

upload_img.blade.PHP

  1. <!-- 上传图片div /S-->
  2. <div class="upload-mask">
  3. </div>
  4. <div class="panel panel-info upload-file">
  5. <div class="panel-heading">
  6. 上传图片
  7. <span class="close pull-right">关闭</span>
  8. </div>
  9. <div class="panel-body">
  10. <div id="validation-errors"></div>
  11. {!! Form::open( array('url' =>['/admin/upload_img'],'method' => 'post','id'=>'imgForm','files'=>true) ) !!}
  12. <div class="form-group">
  13. <label>图片上传</label>
  14. <span class="require">(*)</span>
  15. <input id="thumb" name="file" type="file" required="required">
  16. <input id="imgID" type="hidden" name="id" value="">
  17.  
  18. </div>
  19. {!!Form::close()!!}
  20. </div>
  21. <div class="panel-footer">
  22. </div>
  23. </div>
  24.  
  25. <!-- 上传图片div /E-->

CSS :

  1. .thumb-wrap{
  2. overflow: hidden;
  3. }
  4. .thumb-wrap img{
  5. margin-top: 10px;
  6. }
  7. .pic-upload{
  8. width: 100%;
  9. height: 34px;
  10. margin-bottom: 10px;
  11. }
  12. #thumb-show{
  13. max-width: 100%;
  14. max-height: 300px;
  15. }
  16. .upload-mask{
  17. position: fixed;
  18. top:0;
  19. left: 0;
  20. width: 100%;
  21. height: 100%;
  22. background: rgba(0,.4);
  23. z-index: 1000;
  24. }
  25. .upload-file .close{
  26. cursor: pointer;
  27. font-size: 14px;
  28. }
  29.  
  30. .upload-file{
  31. position: absolute;
  32. top: 50%;
  33. left: 50%;
  34. margin-top: -105px;
  35. margin-left: -150px;
  36. max-width: 300px;
  37. z-index: 1001;
  38. display: none;
  39. }
  40.  
  41. .upload-mask{
  42. display: none;
  43. }

JS:

需要jQuery库 和jQuery.form.js

  1. $(function(){
  2. //上传图片相关
  3.  
  4. $('.upload-mask').on('click',function(){
  5. $(this).hide();
  6. $('.upload-file').hide();
  7. })
  8.  
  9. $('.upload-file .close').on('click',function(){
  10. $('.upload-mask').hide();
  11. $('.upload-file').hide();
  12. })
  13.  
  14. var imgSrc = $('.pic-upload').next().attr('src');
  15. console.log(imgSrc);
  16. if(imgSrc == ''){
  17. $('.pic-upload').next().css('display','none');
  18. }
  19. $('.pic-upload').on('click',function(){
  20. $('.upload-mask').show();
  21. $('.upload-file').show();
  22. console.log($(this).next().attr('id'));
  23. var imgID = $(this).next().attr('id');
  24. $('#imgID').attr('value',imgID);
  25. })
  26.  
  27.  
  28. //ajax 上传
  29. $(document).ready(function() {
  30. var options = {
  31. beforeSubmit: showRequest,success: showResponse,dataType: 'json'
  32. };
  33. $('#imgForm input[name=file]').on('change',function(){
  34. //$('#upload-avatar').html('正在上传...');
  35. $('#imgForm').ajaxForm(options).submit();
  36. });
  37. });
  38.  
  39. function showRequest() {
  40. $("#validation-errors").hide().empty();
  41. $("#output").css('display','none');
  42. return true;
  43. }
  44.  
  45. function showResponse(response) {
  46. if(response.success == false)
  47. {
  48. var responseErrors = response.errors;
  49. $.each(responseErrors,function(index,value)
  50. {
  51. if (value.length != 0)
  52. {
  53. $("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
  54. }
  55. });
  56. $("#validation-errors").show();
  57. } else {
  58.  
  59. $('.upload-mask').hide();
  60. $('.upload-file').hide();
  61. $('.pic-upload').next().css('display','block');
  62.  
  63. console.log(response.pic);
  64.  
  65. $("#"+response.id).attr('src',response.pic);
  66. $("#"+response.id).next().attr('value',response.pic);
  67. }
  68. }
  69.  
  70. })

路由:

  1. //图片上传
  2. Route::post('upload_img','UploadController@imgUpload');

现在需要在模板中include 上传图片模板

(我的放在admin目录下的common目录下,根据自己放的位置更改)

  1. @include('admin.common.upload_img')

现在我在create.blade.PHP中使用

  1. <div class="form-group row">
  2. <label class="col-md-2 control-label">缩略图</label>
  3. <div class="col-md-4 thumb-wrap">
  4. <div class="pic-upload btn btn-block btn-info btn-flat" title="点击上传">点击上传</div>
  5. <img id="logo" src="">
  6. <input type="hidden" name="logo" value="">
  7. </div>
  8. </div>

效果如下图:

1.未上传状态

2.点击上传

3.上传完成

有问题可以在下面留言

原文地址:Laravel 5.1 Ajax上传图片方法

猜你在找的Ajax相关文章