TP6框架上传图片

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返回接口用统一接口返回方法即可

  • Shane在B站的TP6视频

  • 用ThinkPHP6制作后台

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值