文件上传配置
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即可
