TP6框架上传图片
仅作为Shane个人笔记
- 以下代码中出现的show方法
- 均为Shane写的用来返回
- 统一数据的接口方法
接收文件
/**
* 接收文件
*/
$file = request() -> file('file');
接收到文件后判断下收来的文件是否为null
/**
* 判断接收文件是否为空
*/
if ($file == null) {
return $this -> show(
config("status.failed"),
config("message.failed"),
'未上传图片'
);
}
截取上传文件名后缀
/**
* 截取上传文件名后缀
* 将文件名以.分割为数组
* 用PHP end函数取数组最后一个
* 即可得到上传文件后缀
*/
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
判断上传文件是否合法(是否为图片文件)
/**
* 判断上传文件是否合法
* 判断截取上传文件名是否为
* jpeg,jpg,png其中之一
*/
if(!in_array($extension, array("jpeg","jpg","png"))){
return $this -> show(
config("status.failed"),
config("message.failed"),
'上传图片不合法'
);
}
配置保存路径
- 用Filesystem将接收的文件移动至想放的路径
- 配置出一个常使用的路径出来比较好
找到config目录下的filesystem.php文件进行配置
'photo' => [
// 磁盘类型
'type' => 'local',
// 磁盘路径
'root' => app()->getRootPath() . 'public/uploads',
// 磁盘路径对应的外部URL路径
'url' => '/uploads',
// 可见性
'visibility' => 'public',
],
- 这里Shane配置的路径为public下的uploads文件夹
- 配置完后来看下filesystem.php整体是个什么样子
<?php
use think\facade\Env;
return [
// 默认磁盘
'default' => Env::get('filesystem.driver', 'local'),
// 磁盘列表
'disks' => [
'local' => [
'type' => 'local',
'root' => app()->getRuntimePath() . 'storage',
],
'public' => [
// 磁盘类型
'type' => 'local',
// 磁盘路径
'root' => app()->getRootPath() . 'public/storage',
// 磁盘路径对应的外部URL路径
'url' => '/storage',
// 可见性
'visibility' => 'public',
],
'photo' => [
// 磁盘类型
'type' => 'local',
// 磁盘路径
'root' => app()->getRootPath() . 'public/uploads',
// 磁盘路径对应的外部URL路径
'url' => '/uploads',
// 可见性
'visibility' => 'public',
],
],
];
使用Filesystem把上传的文件移动到指定位置
/**
* 调用disk方法
* 此时根目录为/public/uploads
* 再把文件移动至uploads下的photo文件夹里
* 文件名用md5
*/
$saveName = Filesystem::disk('photo') -> putFile('photo', $file, 'md5');
- 上述代码执行完毕之后会返回文件名
- 所以用一个变量($saveName)来接收文件名
给前端返回图片路径
/**
* Shane这里只返回从uploads开始的路径
* 可以根据自己的需求返回需要的路径
*/
exit(str_replace('\\', '', '/uploads/' . $saveName));
至此上传图片完毕
- 再来看下整体代码
/**
* 上传图片
*/
public function uploads_file(){
$file = request() -> file('file');
if ($file == null) {
return $this -> show(
config("status.failed"),
config("message.failed"),
'未上传图片'
);
}
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if(!in_array($extension, array("jpeg","jpg","png"))){
return $this -> show(
config("status.failed"),
config("message.failed"),
'上传图片不合法'
);
}
$saveName = Filesystem::disk('photo') -> putFile('photo', $file, 'md5');
exit(str_replace('\\', '', '/uploads/' . $saveName));
}
PS:
-
给微信小程序做接口用exit(防止后续返回html标签),给普通web返回接口用统一接口返回方法即可
-
用ThinkPHP6制作后台