将Carbon Laravel添加到文件名

3
我在控制器中有文件上传,需要在文件末尾添加 carbon 以便将其作为唯一值插入到数据库中。我是这样做的:
        $upload->title = Auth::User()->id;
        $current = Carbon::now();
        $file = $request->file('file');
        $file->move(storage_path(). '/', $file->getClientOriginalName());
        $upload->name = $file->getClientOriginalName().$current;
    }

我的问题是这样的,当向用户展示文件时,如何将其移除,使用户只看到文件的原始名称(使用php可以实现,但我希望使用“laravel方式”)

Laravel的方式是什么?这只是一个字符串操作,不一定非要用Laravel的方式。 - Devon
2个回答

9

由于某些文件系统中存在:,因此您无法将Carbon::now()添加到文件名中,因此请尝试像这样进行操作:

$current = time(); // Will output something like 1478529571

如果文件名不同,您只想添加日期:

$current = date('Ymd'); // Will output something like 20161107.

或者,如果你想使用Carbon:

$current = Carbon::now()->format('YmdHs'); // WIll output something like 201611071419

1
如Alexey所述,Carbon::now()返回一个对象,但__toString()魔术方法将在转换为字符串时产生YYYY-MM-DD HH:MM:SS格式。对我而言,这似乎不是一个好的文件名格式,使用Unix时间戳会更好。
接下来,如果您希望以这种方式存储文件,存储两个列是否有意义?
Filename | Timestamp
---------------------
OriginalFileName | 123456789

将其保存在文件系统中,命名为OriginalFileName.123456789,但向客户端显示时仍使用OriginalFileName,无需进行字符串操作。
我认为大多数人在将文件存储到文件系统中时甚至不使用原始文件名,他们只生成一个唯一的哈希值,并将其与原始文件名一起存储在数据库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接