ThinkPHP6 API 单文件+多文件上传代码实现方式
开发中经常要用到接口上传 单文件或多文件,做个备忘录,有需要的同学直接copy。
提交方式:form-data , 参数名 file[]
ThinkPHP6接收方式:
$files = request()->file('file');
$res = [];// 存储上传失败的信息
$res['success'] = [];
$res['error'] = [];
foreach($files as $file){
$ext = $file->getOriginalExtension();
//不同文件,储存不同的文件夹
$folder = config('filesystem.disks.folder') . '/api/' . $ext; //以文件后缀名作为存文件的存放目录
if(!file_exists($folder))mkdir($folder, 0700,TRUE);//如果文件夹不存在,则创建
//如果不需要验证文件,那么将try( validate )catch {} 去掉就可以了
try {
validate(['image'=>'fileSize:10240|fileExt:jpg|image:200,200,jpg'])
->check($file);
//====================如果不需要验证,那么就保留这一段 开始====================
$savename = Filesystem::disk('public')->putFile($folder,$file);//上传文件,等到上传之后的文件名称
if (!$savename) {
$res['error'][] = $file->getOriginalName();
}else{
$savename = '/' . str_replace("\\","/",$savename);
$uploadRes = (new ApiUploadFiles())->create([
'uid'=>$uid,
'file_name'=>$file->getOriginalName(),
'file_size'=>$file->getSize(),
'extension'=>$ext,
'url'=>$savename,
]);
if($uploadRes){
$res['success'][] = [
'id'=>$uploadRes->id,
'name'=>$file->getOriginalName(),
'path'=>Request::domain().'/'.$savename,//因为要返回给前端网址,这里要加上域名 Request::domain()
];
}else{
$res['error'][] = ['name'=>$file->getOriginalName()];
}
}
//====================如果不需要验证,那么就保留这一段 结束====================
} catch (\think\exception\ValidateException $e) {
$error[] = $file->getOriginalName().$e->getMessage();
}
}
return show($res,200);
如果觉得对你有帮助,请点个关注,谢谢~