使用该扩展上传文件到七牛会自动删除文件,但我没找到原因,大佬辛苦看看
首先,我已经注释掉插件里的删除方法的调用
<?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%,当然使用者不是我,询问使用者,他也没特殊操作就是上传发布。。。
首先,我已经注释掉插件里的删除方法的调用
<?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%,当然使用者不是我,询问使用者,他也没特殊操作就是上传发布。。。
新增还是编辑?有没有调用原有其它功能
是新增的操作,没别的任何调用,就是传文件-然后表单提交保存数据
是新增的操作,没别的任何调用,就是传文件-然后表单提交保存数据
你线上测试下吧,我看不出什么问题
是新增的操作,没别的任何调用,就是传文件-然后表单提交保存数据
你线上测试下吧,我看不出什么问题
好的,谢谢了,我再研究看看,真的太奇怪了
我找到原因了,就是比如你的表单有必填项,而你忘记填了,提交的时候 提示XX必填 这时候会同时删除已经上传的图片,当你把必填项填好,保存 保存的就是已经被删除的图像的连接