TP5.1手册
https://www.kancloud.cn/manual/thinkphp5_1/354121
功能:图片上传,单图多图均可,校验图片格式大小
// 上传多图 (图片上传name设置为imglist)
// <input type="file" name="imglist[]" />
public function uploadMore(){
//调用上传方法,返回结果 20160820/42a79759f284b767dfcb2a0197904287.jpg
$image = $this->upload( request()->userId,'imglist');
for ($i=0; $i < count($image); $i++) {
//使用封装的公共方法getFileUrl,获取图片上传后返回的文件完整url,重新赋值
$image[$i]['url'] = getFileUrl($image[$i]['url']);
}
return $image;
}
//多图上传
if (is_array($files)) {
// 多图上传
$arr = [];
foreach($files as $file){
$res = $this->UploadEvent($file);
if ($res['status']) {
$arr[] = [
'url'=>$res['data'],
'user_id'=>$userid
];
}
}
return $this->saveAll($arr);
}
// 单图上传
if(!$files) TApiException('请选择要上传的图片',10000,200);
// 单文件上传
$file = $this->UploadEvent($files);
// 上传失败
if(!$file['status']) TApiException($file['data'],10000,200);
// 上传成功,写入数据库
return self::create([
'url'=>$file['data'],
'user_id'=>$userid
]);
}
// 上传单文件,上传验证
static public function UploadEvent($files,$size = '2067800',$ext = 'jpg,png,gif',$path = 'uploads')
{
$info = $files->validate(['size'=>$size,'ext'=>$ext])->move($path);
return [
//使用getPathname()获取上传后的图片路径,手册中没有写该方法
//推荐使用getSaveName()方法
// getSaveName方法返回的是图片的服务器文件地址,并不能直接用于图片的URL地址,尤其在windows平台上必须做转换才能正常显示图片。
'data'=> $info ? $info->getPathname() : $files->getError(),
'status'=> $info ? true :false
];
}
// 获取图片上传后返回的文件完整url
function getFileUrl($url='')
{
if (!$url) return;
//使用URL生成,url('地址表达式',['参数'],['URL后缀'],['域名'])
// https://www.kancloud.cn/manual/thinkphp5_1/353977
return url($url,'',false,true);
}
注意,一些老项目使用的是TP5框架,由于版本较早,更新很多,很多方法开发手册中已经去掉,但实际仍然可以使用,如:
getPathname()方法,获取上传后的图片路径,然而手册中并没有写该方法。
getPathname()方法其实就是现在开发文档中规定的getSaveName()方法
getSaveName方法返回的是图片的服务器文件地址,并不能直接用于图片的URL地址,尤其在windows平台上必须做转换才能正常显示图片。