Laravel Nova 在数据库和本地存储中存储原始文件名

Laravel Nova storing original file name in the database and in local storage

我在将原始文件名存储在数据库和磁盘存储中时遇到问题。该文件在数据库和 Nova 后端中正确保存,但在磁盘存储中只是保存为随机字符串。

在数据库中:my-user-friendly-file-name.pdf

在磁盘存储中:kfnakfncanjnaskdmkasniodanwjioeocniosandoaisndcacs.pdf

我已经按照文档进行操作,下面的代码似乎应该可以工作,但实际上没有。

File::make('Attachment PDF Upload', 'attachment_url')
    ->rules('file')
    ->disk('attachments')
    ->storeOriginalName('attachment_url')
    ->storeAs(function(Request $request) {
        return sha1($request->attachment_url->getClientOriginalName()) . '.' . pathinfo($request->attachment_url->getClientOriginalName(), PATHINFO_EXTENSION);
}),

有没有人遇到过类似的问题?

正如@ceejayoz 所说,我最终为原始文件名存储了一个额外的列,然后在您的代码中根据需要调用它,在我的例子中是通过电子邮件发送附件。

File::make('Attachment PDF Upload', 'attachment_url')
    ->store(function (Request $request, $model) {
        return [
            'attachment_url' => $request->attachment_url->store('/', 'attachments'),
            'attachment_original_name' => $request->attachment_url->getClientOriginalName(),
        ];
    }),

然后像这样简单地附加:

$message->attach($attachment->attachment_url, ['as' => $attachment->attachment_original_name]);