laravel5.5 ajax上传图片

2018-08-31  本文已影响0人  小瞪瞪

laravel做上传特别简单,。就调用两个函数名。就可。

下面是我做了详细操作,所以看起来代码有点多。其实只有一点点  (笑脸)

第一步:更改filessystem.php

'public' => [

    'driver' => 'local',

    'root' => public_path('uploads'),  //public目录-->文件存放的目录为public/uploads文件夹

    'url' => '/uploads',

    'visibility' => 'public',

],

我做的方法不需要修改filesystem.php

第二步:设置web.php 路径

、Route::any('/upload',TransactionController@upload');//any

第三步:写html

入口:

js一、

js2:

js3.   注:ajax上传图片必须async:false;contentType:false;processData:false; php才能接收到

form表单:

注意:laravel post提交必须有token验证   {{ csrf_field() }}

第四步:model/UploadImage.php

贴代码:(我网上找的一个大神的上传类,贴过来的,感觉挺好用的)

namespace App\Model;

use Illuminate\Foundation\Auth\User as Authenticatable;

use Illuminate\Http\Response;

use Input,DB,Request;

use Validator;

/**上传图片模型层*/

class UploadsImg extends Authenticatable

{

public function upload_img($file,$url_path,$rule,$uid)

{

// 检验一下上传的文件是否有效.

  if($file->isValid()){

  // 缓存在tmp文件夹中的文件名 例如 php8933.tmp 这种类型的.

  $clientName = $file -> getClientOriginalName();

  $tmpName = $file ->getFileName();

  // 这个表示的是缓存在tmp文件夹下的文件的绝对路径(这里要注意,如果我使用接下来的move方法之后, getRealPath() 就找不到文件的路径了.因为文件已经被移走了.所以这里道出了文件上传的原理,将文件上传的某个临时目录中,然后使用Php的函数将文件移动到指定的文件夹.) 

  $realPath = $file -> getRealPath();

        // 上传文件的后缀.

  $entension = $file -> getClientOriginalExtension();

        if(!in_array($entension,$rule)){

  return '图片格式为jpg,png,gif';

  }

  $newName =md5(date("Ymd")).$uid.".".$entension;

  $path = $file -> move($url_path,$newName);

  // 这里public_path()就是public文件夹所在的路径.$newName 通过算法获得的文件的名称.主要是不能重复产生冲突即可. 

  // 利用日期和客户端文件名结合 使用md5 算法加密得到结果.后面加上文件原始的拓展名.

                //文件名

                $namePath = $url_path.'/'.$newName;

  return ['name' => $newName,'path' => $namePath];

  }else{

      return 0;

        }

}

}

第五步: 控制器:

use App\Model\UploadsImg;

第六步:

//文件上传

    public function upload(Request $request){

        $this->uploadImg = new UploadsImg;

        $file=$request->file("files");

        $url_path="uploads/qrcode";

        $rule=['jpg','png','gif'];

        $id=$request->post("aid").$request->post("a_uid").$request->post("d_id");

        $uploadRes=$this->uploadImg->upload_img($file,$url_path,$rule,$id);

        if($uploadRes){

          $data=DB::table('code_change')

              ->where('id', $request->post("d_id"))

              ->update(['new_code' => $uploadRes['path']]);

        return json_encode(['msg'=>'上传成功','code'=>1]);

      }else{

          return json_encode(['msg'=>'上传失败','code'=>0]);

      }

    }

第六步:取图片

注意;laravel5.5通常会将图片存入storage/public下。

需在控制器指定路径:

  $url_path="uploads/qrcode";

上一篇 下一篇

猜你喜欢

热点阅读