lsky-pro icon indicating copy to clipboard operation
lsky-pro copied to clipboard

对文件重命名失败,提示服务器异常

Open wananya opened this issue 2 years ago • 7 comments

image

但是并没有错误日志信息,起码我在日志列表和文件中没有看到

wananya avatar Apr 06 '23 22:04 wananya

符号去掉试一下

0xxb avatar Apr 07 '23 06:04 0xxb

只有中文,没有符号

熊孝兵 @.***> 于2023年4月7日周五 14:34写道:

符号去掉试一下

— Reply to this email directly, view it on GitHub https://github.com/lsky-org/lsky-pro/issues/644#issuecomment-1499987308, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMW2GBEWHLN4OHURPIFPAN3W76YO3ANCNFSM6AAAAAAWV6BIXY . You are receiving this because you authored the thread.Message ID: @.***>

wananya avatar Apr 20 '23 05:04 wananya

好像连后缀的.也不能用,后缀删除也不影响图片格式,目前来说是这样的

dogsking avatar Jun 13 '23 06:06 dogsking

我也遇到了这个问题

hachiy625 avatar Sep 27 '23 07:09 hachiy625

我也遇到了这个问题,v2版本没法重命名,报错信息一样,求解答!!!我去看storage/logs,是空的,没有报错日志。

howardhey avatar Nov 14 '23 14:11 howardhey

好像连后缀的.也不能用,后缀删除也不影响图片格式,目前来说是这样的

的确,我按照你说的试了,如果保留下划线符号但删除文件后缀,是可以保存的,但上传之后文件会自动命名为本地中带格式后缀的名称。

howardhey avatar Nov 14 '23 14:11 howardhey

在 /app/Services/ImageService.php 文件中,我找到一个函数:

$image->fill([
            'md5' => md5_file($file->getRealPath()),
            'sha1' => sha1_file($file->getRealPath()),
            'path' => $configs->get(GroupConfigKey::PathNamingRule) ? dirname($pathname) : '',
            'name' => basename($pathname),
            'origin_name' => $file->getClientOriginalName(),
            'size' => $file->getSize() / 1024,
            'mimetype' => $file->getMimeType(),
            'extension' => strtolower($extension),
            'width' => $width,
            'height' => $height,
            'is_unhealthy' => false,
            'uploaded_ip' => $request->ip(),
        ]);

我对比了数据库,文件保存的初始名称就是 origin_name,其他的应该也是保存在数据库中的图片信息,所以看上去是通过这里设置的 origin_name。我想做一些修改,但我没有学习过 php,只能自己猜着去尝试。我看到这个 getClientOriginalName,猜测它是用来获取本地文件名称的,我想用从右侧开始匹配正则匹配的方式,把文件名分割成两部分,例如 aaa.jpg,分割成 aaa 和 jpg,这样我就可以只保留名称 aaa,反正在图床中显示的文件名称中的后缀部分对文件实际没有影响。毕竟这只是展示名称,真正的文件名已经按照规则自动修改了。只保留前半部分看着还顺眼,尤其是如果保存后半部分的话,我再重命名时还需要手动删掉后缀,不如提前统一格式。

所以,我尝试修改后这个值为:

'origin_name' => preg_split("/(?<=\.).*$/", $file->getClientOriginalName(), $limit = 2)[0],

修改后成功了,这样就可以把后缀去掉,在上传时自动命名为纯文件名了!

howardhey avatar Nov 15 '23 02:11 howardhey