Skip to content

文件上传

文件上传配置

plugin\file\config\superadminnx.php中的file_system,目前只支持配置上传到本地或上传到阿里云oss

所有上传都使用plugin\file\app\utils\FileUtils类,或者直接使用函数 upload() 跟 upload_public() :

查看代码
php
<?php
namespace app\admin\controller;

use support\Request;
use support\Response;
use plugin\file\app\utils\FileUtils; 

/**
 * 文件
 *
 * @author zy <741599086@qq.com>
 * @link https://www.superadminx.com/
 * */
class File
{
    //此控制器是否需要登录
    protected $onLogin = true;
    //不需要登录的方法
    protected $noNeedLogin = ['download'];

    /**
     * 上传文件
     * @method post
     * @param Request $request 
     * @return Response
     */
    public function upload(Request $request) : Response
    {
        $result = FileUtils::upload(); 
        
        if (is_array($result) && $result) {
            return result($result, 1, '上传成功', false);
        } else {
            return result([], -1, '没有文件被上传', false);
        }
    }
}

如果配置是上传到阿里云oss,如何上传到本地

此时直接调用 File类的uploadPublic 方法,此方法只会上传到本地,如整个项目文件是配置上传到阿里云的,当导入数据上传的excel就应该上传到本地,同时上传到tmp_file文件夹

查看代码
php
<?php
namespace app\admin\controller;

use support\Request;
use support\Response;
use plugin\file\app\utils\FileUtils; 

/**
 * 文件
 *
 * @author zy <741599086@qq.com>
 * @link https://www.superadminx.com/
 * */
class File
{
    /**
     * 上传文件
     * @method post
     * @param Request $request 
     * @return Response
     */
    public function upload(Request $request) : Response
    {
        $result = FileUtils::uploadPublic('/tmp_file'); 
        
        if (is_array($result) && $result) {
            return result($result, 1, '上传成功', false);
        } else {
            return result([], -1, '没有文件被上传', false);
        }
    }
}

临时上传或生成的临时文件

项目中有一个目录 app/public/tmp_file ,此目录是专门用来访临时文件的,每天凌晨会自动删除里面超过24小时的文件,如导出数据生成的表格就应该生成到此目录,导入数据上传的表格也上传到此目录

删除没使用的文件

所有的文件上传都会存到file表中并记录使用次数,当使用次数是0的时候则定时任务每天凌晨会删除此文件

所以模型参数定义中我新增了一个fileField属性,代表数据表中哪些字段中有包含附件(上传的文件),因为继承了BaseModel模型的,从而BaseModel模型在新增数据、修改数据、删除数据的时候会从数据中提炼出所有的附件地址存到file表中,并且更新此附件的使用次数,定时任务(每天凌晨)会自动删除使用次数是0的附件文件。

php
/**
 * 模型参数
 * @return array
 */
protected function getOptions() : array
{
    return [
        'name'               => 'user',
        'autoWriteTimestamp' => true,
        'type'               => [],
        'fileField'          => [ // 包含附件的字段,''代表直接等于附件路劲,'array'代表数组中包含附件路劲,'editor'代表富文本中包含附件路劲
            'img' => '',
        ],
    ];
}

不想使用此功能、不删除没使用的文件

直接修改plugin\file\config\superadminx.php 中 clear_file设置为false即可