ThinkPHP6 文件上传验证

文件上传的基础知识

文件上传原理

客户端选择文件先上传至服务器指定的临时文件位置中,再由临时目录中上传至指定目录的过程称为文件上传

文件上传的相关配置 

file_uploads(允许/禁止 PHP开启HTTP文件上传(布尔))

upload_tmp_dir  (文件上传临时文件所在目录(字符串))

upload_max_filesize   (上传文件最大是多少(整型),单位(bytes))

max_file_uploads        (允许上传最大文件数(整型))

max_execution_time        (脚本在解析器终止之前运行最长时间(单位:秒))

max_input_time        (脚本解析输入数据最长时间(秒))

post_max_size        (允许POST数据最大值(字符串/整型))

memory_limt        (允许脚本分配的最大内存量(以字节为单位))

upload_max_filesize   <   post_max_size   <memory_limt    <     系统物理内存

文件上传注意事项 

表单必须设置为post方式提交

必须给form增设enctype="multipart/form-data"

在服务器使用$_POST无法获取文件上传信息 ,必须使用$_FILES

 $_FILES数组所包含的元素含义

$_FILES["file"]["name"] - 上传文件的名称

$_FILES["file"]["type"] - 上传文件的类型

$_FILES["file"]["size"] - 上传文件的大小,以字节计

$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

$_FILES["file"]["error"] - 由文件上传导致的错误代码

(异步请求)

参照上传接口文档

请求地址

POST /logo

需进行token认证

示例: http://adminapi.tbyue.com/logo

请求参数

名称类型必填备注
typestring图片类型。商品:goods;分类:category;品牌:brand
logofilelogo文件

返回数据

logo文件访问路径

返回示例

"/uploads/goods/20190530/adsdsfsgsds.png"

书写代码

/**
 * 单文件上传接口
 * @param Request $request
 * @return \think\response\Json
 */
public function logo(Request $request): Json
{
    // 接收上传的类型
    $type = $request->post("type");
    // 接收文件上传
    $file = $request->file();
    // 设定文件上传的大小
    $fileSize = 1024*1024*2;
    // 验证文件上传的大小、后缀
    try {
        // 验证文件大小、后缀
        validate(['logo'=>'fileSize:'.$fileSize.'|fileExt:jpg,png'])
            ->check($file);
        $files = $request->file("logo");
        // 将图片保存至本地
        $saveName = \think\facade\Filesystem::putFile($type, $files);
        // 将文件上传的路径返回
        return success('uploads/' . $saveName);
    } catch (\think\exception\ValidateException $e) {
        return fail($e->getMessage());
    }
}

商品相册上传接口(多图上传)

设置路由

Route::post("images","Upload/images");

参照接口文档

请求地址

POST /images

需进行token认证

示例: http://adminapi.tbyue.com/images

请求参数

名称类型必填备注
typestring图片类型。默认为商品:goods
imagesstring图片文件

返回数据

名称备注
success上传成功的图片地址集合
error上传成功的图片名称和错误信息集合

返回示例

{
	“success”:[
		"/uploads/goods/20190530/dsgdsafdsfds.png",
		"/uploads/goods/20190530/dsfdsdgfdasd.png",
	],
	"error":[
		{
			"name":"1.png",
			"msg":"图片尺寸错误"
		},
		{
			"name":"2.png",
			"msg":"图片类型错误"
		}
	]
}

书写上传逻辑

/**
 * 批量上传图片
 * @param Request $request
 * @return Json
*/
public function images(Request $request): Json
{
    // 接收上传的类型
    $type = $request->post("type", "goods");
    // 接收文件上传
    $file = $request->file("images");
    // 设定文件上传的大小
    $fileSize = 1024 * 1024 * 2;
    // 存储上传失败的信息
    $error = [];
    // 存储上传成功的信息
    $success = [];
    // 循环批量验证
    foreach ($file as $val) {
        // 捕获异常
        try {
            // 验证文件大小、后缀
            validate(['images' => 'fileSize:' . $fileSize . '|fileExt:jpg'])
                ->check(['images' => $val]);
            // 上传文件
            $saveName = \think\facade\Filesystem::putFile($type, $val);
            // 将成功后的路径保存到数组中
            $success = 'uploads/' . $saveName;
        } catch (\think\exception\ValidateException $e) {
            // 记录验证错误的失败信息
            $error= [
                'name' => $val->getOriginalName(),
                'msg' => $e->getMessage()
            ];
        }
    }
    // 组装返回数据的结果集
    $data = [
        'success' => $success,
        'error' => $error
    ];
    // 返回数据
    return success($data);
}
posted @   哎呀呀哈  阅读(223)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示