首页 > 解决方案 > Laravel Nova 将原始文件名存储在数据库和本地存储中

问题描述

我在将原始文件名存储在数据库和磁盘存储中时遇到问题。该文件正确保存在数据库和 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);
}),

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

标签: phplaravellaravel-nova

解决方案


因此,正如@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]); 

推荐阅读