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";