ajax + Laravel 多文件上传

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

说明

前端使用了 jQuery.form.js 实现 Ajax 表单提交,后端使用的是著名的 Laravel(5.4)进行接收、存储,支持一次选择多个文件,选择确定后立即上传,并显示上传后的链接

gif video

路由

C:\L\2017.11.15 MAMP\root\tagMoon\routes\web.PHP
  1. Route::post('/multiUploadImg','UploadCtrl@multiUploadImg');
  2. Route::get('/upload',function(){
  3. return view('upload.main');
  4. });

前端

C:\L\2017.11.15 MAMP\root\tagMoon\resources\views\upload\main.blade.PHP

截屏

before :

(权简风格 :)

after :

html

  1. <form id="form_uploadImg" method="post" enctype="multipart/form-data">
  2. <div class="file-field">
  3. <div class="btn btn-primary btn-sm">
  4. <span>Choose files</span>
  5. <input name="filesToUpload[]" id="input_multifileSelect" type="file" multiple>
  6. </div>
  7. </div>
  8. </form>
  9. <br><br><br>
  10. <div id="div_uploadedImgs"></div>

!!! 注意下面这一句,必须要有一对方括号:[]

  1. <input name="filesToUpload[]"

js

  1. $(document).ready(function() {
  2. $('#input_multifileSelect').on('change',function(){
  3. var ajax_option= {
  4. url: "multiUploadImg",// type : 'post',默认是 form action
  5. success: function ( data ) {
  6. console.log( data );
  7. showUploadedImgs( data.uploadedFiles );
  8. }
  9. }
  10. $('#form_uploadImg').ajaxSubmit( ajax_option );
  11. });
  12. });
  13. // 显示上传图片
  14. function showUploadedImgs( imgs ){
  15. $.each( imgs,function(index,img ) {
  16. var pic = '<p><img src="{0}" alt="" /><br>{0} ( {1} - {2} )</p>';
  17. pic = pic.format( baseUrl + 'public/' + img.savedFile,img.name,img.size );
  18. $('#div_uploadedImgs').prepend( pic );
  19. });
  20. }
  21. // 为 String 类增加 format 函数
  22. String.prototype.format = function() {
  23. var str = this;
  24. for (var i = 0; i < arguments.length; i++) {
  25. var reg = new RegExp("\\{" + i + "\\}","gm");
  26. str = str.replace(reg,arguments[i]);
  27. }
  28. return str;
  29. }

控制器(Controller)

C:\L\2017.11.15 MAMP\root\tagMoon\app\Http\Controllers\UploadCtrl.PHP
  1. /**
  2. * 接收上传文件
  3. * @param Request $request
  4. * @return array
  5. */
  6. public function multiUploadImg( Request $request ){
  7. // 重组数组,子函数
  8. function reArrayFiles( $file_post ) {
  9. $file_ary = array();
  10. $file_count = count($file_post['name']);
  11. $file_keys = array_keys($file_post);
  12. for ($i=0; $i<$file_count; $i++) {
  13. foreach ($file_keys as $key) {
  14. $file_ary[$i][$key] = $file_post[$key][$i];
  15. }
  16. }
  17. return $file_ary;
  18. }
  19.  
  20. $imgFiles = $_FILES['filesToUpload']; // 与前端页面中的 input name=“filesToUpload[]” 相对应
  21. $uploadedFiles = array(); // 返回值
  22.  
  23. if(!empty($imgFiles))
  24. {
  25. $img_desc = reArrayFiles( $imgFiles );
  26. $destinationPath = 'storage/uploads/'; //public 文件夹下面建 storage/uploads 文件
  27.  
  28. foreach( $img_desc as $img )
  29. {
  30. $savedFile = $destinationPath.date('YmdHis',time()).mt_rand().'.'.pathinfo( $img['name'],PATHINFO_EXTENSION );
  31. move_uploaded_file($img['tmp_name'],$savedFile);
  32. $img['savedFile'] = $savedFile ;
  33. array_push( $uploadedFiles,$img );
  34. }
  35. }
  36.  
  37. $allowed_extensions = ["png","jpg","gif"];
  38. // TODO 判断文件类型
  39.  
  40. return ['uploadedFiles' => $uploadedFiles ];
  41. }

response

note

  • PHP : 7.1.5
  • Laravel : 5.4
  • jQuery : 3.3.1
  • Date : 2018.02.07

download

http://download.csdn.net/down...

猜你在找的Ajax相关文章