dcat-vue icon indicating copy to clipboard operation
dcat-vue copied to clipboard

使用该扩展上传文件到七牛会自动删除文件,但我没找到原因,大佬辛苦看看

Open ieras opened this issue 2 years ago • 5 comments

首先,我已经注释掉插件里的删除方法的调用

<?php

namespace Ieras\DcatVue\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;

class WeiwaitUpload extends Model
{
    protected $table = 'uploads';
    protected $fillable = [
        'name'
    ];
 
    public static function clearUnusedFiles()
    {
        self::query()->where('created_at', '<', now()->subDay())
            ->get()
            ->map(function (self $file) {
                $file->delete();
                Storage::disk($file->disk)->delete($file->name);
            });
    }
}
//调用的地方
public function uploaded(Request $request)
    {
        //WeiwaitUpload::clearUnusedFiles();

        WeiwaitUpload::query()
            ->insert(array_map(fn($item) => ['name' => $item, 'created_at' => now(), 'disk' => $request['disk']],
                (array)$request['files']
            ));

        return Storage::disk($request['disk'])->url($request['files']);
    }

感觉最大的可能就是下面这里了

    protected function prepareInputValue($file)
    {
        WeiwaitUpload::query()->whereIn('name', (array) $file)->delete();

        return parent::prepareInputValue($file);
    }

不过呢,数据里的记录没被删,只是七牛的文件被删了,所以感觉也很奇怪,又不像上面这里。 我本机测试的时候并没复现出来,尽管我各种尝试、比如裁剪、删除、重置、换图等。。。 这情况发生在服务器端(并且我登录服务器看了,那个删除代码确实是注释状态),而且被删就在上传完成后的第36秒。 我的后台表单,存储着玩着的图片路径(我觉得可以排出是用户自己删的,而且我测试点击表单的删除并不会删七牛那的文件) 。。。 希望大佬帮忙看看原因,实在找不到为啥了。 我让七牛给调用删除记录了(删除ip确实来自于我的服务器,发生在上传完后的第36秒) 上传完成时间(weiwait_upload表记录的):2023-01-31 10:38:33 (可以百分百确定上传成功了,因为文件还能访问,当然是七牛的cdn缓存) 七牛给的删除日志时间:{"op":"delete","fh":"C5YEHAMQEWkOBUtbFgAAAAAAC8avNnM9ieVrtXXNP9bjibfjz9PwNNAAAADwgtHYac5VAAAA","ip":"ip我手动隐藏","mimeType":"image/png","ua":"QiniuPHP/7.7.0 (Linux/x86_64) PHP/8.1.13","bucket":"file-xxxx","uid":1382807647,"fwd":"211.0.0.0(ip我手动隐藏)","xl":"h0UAAAAShkhcRD8X","fsize":1465163,"machine":"wz41","putTime":16751327136625344,"delTime":"2023-01-31T02:39:09.566642Z","id":"8jr0sa:images/1ec9b4ebcba390f2d231caa2b1a56b61.png","region":"cn-east-2","_time":1675135906678,"hash":"FgvGrzZzPYnla7V1zT_W44m348_T"} 日志可以看出是2023-01-31T02:39:09.566642Z(+8时区)删除的,前后差了36秒

这个情况在服务端发生概率90%,当然使用者不是我,询问使用者,他也没特殊操作就是上传发布。。。

ieras avatar Jan 31 '23 14:01 ieras