fixed:修复附件无法删除

This commit is contained in:
JaguarJack 2021-03-01 21:01:37 +08:00
parent 17491ca7da
commit c3b36013d7
5 changed files with 99 additions and 88 deletions

View File

@ -4,8 +4,6 @@ namespace catchAdmin\system\controller;
use catcher\base\CatchController;
use catcher\CatchResponse;
use catchAdmin\system\model\Attachments as AttachmentsModel;
use catcher\Utils;
use catcher\facade\FileSystem;
class Attachments extends CatchController
{
@ -35,22 +33,6 @@ class Attachments extends CatchController
*/
public function delete($id, AttachmentsModel $model)
{
$attachments = $model->whereIn('id', Utils::stringToArrayBy($id))->select();
if ($model->deleteBy($id)) {
foreach ($attachments as $attachment) {
if ($attachment->driver == 'local') {
$localPath = config('filesystem.disks.local.root') . DIRECTORY_SEPARATOR;
$path = $localPath . str_replace('\\','\/', $attachment->path);
if (FileSystem::exists($path)) {
Filesystem::delete($path);
}
} else {
Filesystem::delete($attachment->path);
}
}
}
return CatchResponse::success();
return CatchResponse::success($model->deletes($id));
}
}

View File

@ -3,8 +3,10 @@ namespace catchAdmin\system\model;
use catchAdmin\system\model\search\AttachmentsSearch;
use catcher\base\CatchModel;
use catcher\Utils;
use think\file\UploadedFile;
use think\Model;
use think\facade\Filesystem;
class Attachments extends CatchModel
{
@ -54,4 +56,37 @@ class Attachments extends CatchModel
'path' => $data['path']
]);
}
/**
* 批量删除
*
* @time 2021年03月01日
* @param $id
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @return bool
*/
public function deletes($id): bool
{
Utils::setFilesystemConfig();
$this->whereIn('id', Utils::stringToArrayBy($id))
->select()
->each(function ($attachment){
if ($attachment->delete()) {
if ($attachment->driver == 'local') {
$localPath = config('filesystem.disks.local.root') . DIRECTORY_SEPARATOR;
$path = $localPath . str_replace('\\','\/', $attachment->path);
if (file_exists($path)) {
Filesystem::delete($path);
}
} else {
Filesystem::delete($attachment->path);
}
}
});
return true;
}
}

View File

@ -24,6 +24,6 @@ trait DeveloperSearch
public function searchStatusAttr($query, $value, $data)
{
return $query->where('driver', $value);
return $query->where('status', $value);
}
}

View File

@ -47,11 +47,6 @@ class CatchUpload
*/
protected $path = '';
public function __construct()
{
$this->initDriver();
}
/**
* upload files
*
@ -259,70 +254,9 @@ class CatchUpload
* @time 2020年06月01日
* @return void
*/
protected function initUploadConfig()
public function initUploadConfig()
{
$configModel = app(Config::class);
$upload = $configModel->where('key', 'upload')->find();
if ($upload) {
$disk = app()->config->get('filesystem.disks');
$uploadConfigs = $configModel->getConfig($upload->component);
if (!empty($uploadConfigs)) {
// 读取上传可配置数据
foreach ($uploadConfigs as $key => &$config) {
// $disk[$key]['type'] = $key;
// 腾讯云配置处理
if (strtolower($key) == 'qcloud') {
$config['credentials'] = [
'appId' => $config['app_id'] ?? '',
'secretKey' => $config['secret_key'] ?? '',
'secretId' => $config['secret_id'] ?? '',
];
$readFromCdn = $config['read_from_cdn'] ?? 0;
$config['read_from_cdn'] = intval($readFromCdn) == 1;
}
// OSS 配置
if (strtolower($key) == 'oss') {
$isCname = $config['is_cname'] ?? 0;
$config['is_cname'] = intval($isCname) == 1;
}
}
// 合并数组
array_walk($disk, function (&$item, $key) use ($uploadConfigs) {
if (!in_array($key, ['public', 'local'])) {
if ($uploadConfigs[$key] ?? false) {
foreach ($uploadConfigs[$key] as $k => $value) {
$item[$k] = $value;
}
}
}
});
// 重新分配配置
app()->config->set([
'disks' => $disk,
], 'filesystem');
}
}
}
/**
* 初始化
*
* @time 2020年09月07日
* @return $this
*/
protected function initDriver()
{
if ($driver = Utils::config('site.upload')) {
$this->driver = $driver;
}
return $this;
Utils::setFilesystemConfig();
}
/**

View File

@ -233,4 +233,64 @@ class Utils
return $data;
}
/**
* 设置 filesystem config
*
* @time 2021年03月01日
* @return void
*/
public static function setFilesystemConfig()
{
$configModel = app(Config::class);
$upload = $configModel->where('key', 'upload')->find();
if ($upload) {
$disk = app()->config->get('filesystem.disks');
$uploadConfigs = $configModel->getConfig($upload->component);
if (!empty($uploadConfigs)) {
// 读取上传可配置数据
foreach ($uploadConfigs as $key => &$config) {
// $disk[$key]['type'] = $key;
// 腾讯云配置处理
if (strtolower($key) == 'qcloud') {
$config['credentials'] = [
'appId' => $config['app_id'] ?? '',
'secretKey' => $config['secret_key'] ?? '',
'secretId' => $config['secret_id'] ?? '',
];
$readFromCdn = $config['read_from_cdn'] ?? 0;
$config['read_from_cdn'] = intval($readFromCdn) == 1;
}
// OSS 配置
if (strtolower($key) == 'oss') {
$isCname = $config['is_cname'] ?? 0;
$config['is_cname'] = intval($isCname) == 1;
}
}
// 合并数组
array_walk($disk, function (&$item, $key) use ($uploadConfigs) {
if (!in_array($key, ['public', 'local'])) {
if ($uploadConfigs[$key] ?? false) {
foreach ($uploadConfigs[$key] as $k => $value) {
$item[$k] = $value;
}
}
}
});
$default = Utils::config('site.upload');
// 重新分配配置
app()->config->set([
'default' => $default ? : 'local',
'disks' => $disk,
], 'filesystem');
}
}
}
}