On this page
上传多图api
创建相关文件
php
// 创建图片控制器
php think make:controller api/v1/Image
// 创建图片模型
php think make:model Image
// 创建公共文件上传类
php think make:controller FileController
controller层:application\api\controller\v1\Image.php
php
// 上传多图
public function uploadMore(){
$list = (new ImageModel())->uploadMore();
return self::showResCode('上传成功',['list'=>$list]);
}
route层:route\route.php
php
// 用户操作(绑定手机)
Route::group('api/:v1/',function(){
...
// 上传多图
Route::post('image/uploadmore','api/:v1.Image/uploadMore');
...
})->middleware(['ApiUserAuth','ApiUserBindPhone','ApiUserStatus']);
model层:application\common\model\Image.php
php
// 上传多图
public function uploadMore(){
$image = $this->upload(request()->userId,'imglist');
$imageCount = count($image);
for ($i=0; $i < $imageCount; $i++) {
$image[$i]['url'] = getFileUrl($image[$i]['url']);
}
return $image;
}
// 上传图片
public function upload($userid = '',$field = ''){
// 获取图片
$files = request()->file($field);
if (is_array($files)) {
// 多图上传
$arr = [];
foreach($files as $file){
$res = \app\common\controller\FileController::UploadEvent($file);
if ($res['status']) {
$arr[] = [
'url'=>$res['data'],
'user_id'=>$userid
];
}
}
return $this->saveAll($arr);
}
// 单图上传
if(!$files) TApiException('请选择要上传的图片',10000,200);
// 单文件上传
$file = \app\common\controller\FileController::UploadEvent($files);
// 上传失败
if(!$file['status']) TApiException($file['data'],10000,200);
// 上传成功,写入数据库
return self::create([
'url'=>$file['data'],
'user_id'=>$userid
]);
}
文件上传类封装:
\application\common\controller\FileController.php
php
<?php
namespace app\common\controller;
use think\Request;
class FileController
{
// 上传单文件
static public function UploadEvent($files,$size = '2067800',$ext = 'jpg,png,gif',$path = 'uploads')
{
$info = $files->validate(['size'=>$size,'ext'=>$ext])->move($path);
return [
'data'=> $info ? $info->getPathname() : $files->getError(),
'status'=> $info ? true :false
];
}
}
封装获取图片完整路径的助手函数
application\common.php
php
// 获取文件完整url
function getFileUrl($url='')
{
if (!$url) return;
return url($url,'',false,true);
}