【问题标题】:Laravel Nova storing original file name in the database and in local storageLaravel Nova 将原始文件名存储在数据库和本地存储中
【发布时间】:2021-08-24 13:37:00
【问题描述】:

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

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

【问题讨论】:

  • 别管它。故意这样,以避免用相同的文件名覆盖其他人的上传。没有理由担心它的存储名称。
  • 我剩下的所有其他带有文件上传的模型,但这是用于控制电子邮件附件,我想要更人性化的附件名称。
  • 你仍然可以这样做。将原始名称存储在不同的列中。在您的 Mailable 中,->attach('/path/to/file', ['as' => $foo->original_name])。见laravel.com/docs/8.x/mail#attachments
  • 太棒了!我将添加另一列并研究该解决方案。

标签: php laravel laravel-nova


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多