likeadmin我发现是一个非常好用,并且能快速上手的整套后台程序。它使用了thinkphp6+vue的架构,而且还可以使用后台的代码生成工具,快速的创建后台管理表单,大大节省了时间。
在使用这个后台框架的时候,里面自带了一个“素材中心”。但是这个“素材中心”它限制了上传的类型,只能上传图片和视频两种类型。但是如果我们需要上传其它文件,并且也想通过这个“素材中心”来进行管理的话,我们就需要去改动代码了。
主要改动的PHP文件,涉及3个文件,分别是以下4个:
- config/project.php
- app/common/service/UploadService.php
- app/common/service/storage/engine/Server.php
- app/adminapi/controller/UploadController.php
首先,我们先找到project.php文件,我们可以找到
'file_files' => [
'xls', 'xlsx'
],
然后在后面加上
// 文件上传限制 (文件)
'file_files' => [
'xls', 'xlsx'
],
然后找到第二个文件UploadService.php
我们可以找到最后的“视频上传”方法,然后在后面加上文件上传的方法
public static function files($cid, int $sourceId = 0, int $source = FileEnum::SOURCE_ADMIN, string $saveDir = 'uploads/files')
{
try {
$config = [
'default' => ConfigService::get('storage', 'default', 'local'),
'engine' => ConfigService::get('storage') ?? ['local'=>[]],
];
// // 2、执行文件上传
$StorageDriver = new StorageDriver($config);
$StorageDriver->setUploadFile('file');
$fileName = $StorageDriver->getFileName();
$fileInfo = $StorageDriver->getFileInfo();
// 校验上传文件后缀
if (!in_array(strtolower($fileInfo['ext']), config('project.file_files'))) {
throw new Exception("文件不允许上传". $fileInfo['ext'] . "文件");
}
// 上传文件
$saveDir = $saveDir . '/' . date('Ymd');
if (!$StorageDriver->upload($saveDir)) {
throw new Exception($StorageDriver->getError());
}
// 3、处理文件名称
if (strlen($fileInfo['name']) > 128) {
$name = substr($fileInfo['name'], 0, 123);
$nameEnd = substr($fileInfo['name'], strlen($fileInfo['name'])-5, strlen($fileInfo['name']));
$fileInfo['name'] = $name . $nameEnd;
}
// 4、写入数据库中
$file = File::create([
'cid' => $cid,
'type' => FileEnum::FILE_TYPE,
'name' => $fileInfo['name'],
'uri' => $saveDir . '/' . str_replace("\\","/", $fileName),
'source' => $source,
'source_id' => $sourceId,
'create_time' => time(),
]);
// 5、返回结果
return [
'id' => $file['id'],
'cid' => $file['cid'],
'type' => $file['type'],
'name' => $file['name'],
'uri' => FileService::getFileUrl($file['uri']),
'url' => $file['uri']
];
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
添加好了以后,找到最后一个文件Server.php
在大约45行的样子,找到
$limit = array_merge(config('project.file_image'), config('project.file_video'));
这行代码,然后修改成
$limit = array_merge(config('project.file_image'), config('project.file_video'), config('project.file_files'));
文件UploadController.php
在64行位置public function video()方法的后面,添加
/**
* @notes 上传文件
* @return Json
* @author teaxia
* @date 2024/01/11 0:15
*/
public function files()
{
try {
$cid = $this->request->post('cid', 0);
$result = UploadService::files($cid);
return $this->success('上传成功', $result);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
至此,php部分修改完成。
前端部分呢,找到
src/views/material/index.vue文件
在tabsMap里面添加
{
type: 'files',
name: '文件'
}
src/components/material/index.vue文件
找到56行
<upload v-if="type == 'video'" class="mr-3" :data="{ cid: cateId }" :type="type" :show-progress="true"
@change="refresh">
<el-button type="primary">本地上传</el-button>
</upload>
在后面添加
<upload v-if="type == 'files'" class="mr-3" :data="{ cid: cateId }" :type="type" :show-progress="true"
@change="refresh">
<el-button type="primary">本地上传</el-button>
</upload>
找到276行左右
case 'video':
return 20
在后面添加
case 'files':
return 30
评论 (0)