Laravel Storage put方法返回true

时间:2019-09-26 12:41:39

标签: php laravel laravel-storage

在我的laravel应用程序中,我有一个<form>,可以上传多个文件。当我提交表单时,多个文件被存储到database中,但是应该存储文件路径的表列attachment始终显示1(true)。

if (request()->has('attachment_files')) {
    $files = request()->attachment_files;

    foreach ($files as $file) {

      $filename = $file->getClientOriginalName();
      $extension = $file->getClientOriginalExtension();
      $filesize = $file->getClientSize();

      $path = Storage::disk('local')->put('attachments' . $filename, $extension);
      $data = SingleApplicationFile::create([
         'files_id' => $application->id,
         'single_application_id' => $application->id,
         'attachment' => $path,
         'attachment_name' => $filename,
         'attachment_size' => $filesize,
      ]);

      $attachment_file[] = $data;

      new SingleApplicationFile($attachment_file);
   }
}

如上所述,行$path = Storage::disk('local')->put('attachments' . $filename, $extension);总是给我true,并且在数据库列中存储了“ 1”。

我以前使用此方法上传单个文件,在这种情况下,上述行存储了attachments/somefilename.pdf-那么这里的问题是什么

2 个答案:

答案 0 :(得分:0)

接下来您需要运行

php artisan storage:link

,然后您可以将文件检索为

{{ asset('storage/attachments' . $filename) }}

所以您可能希望另存为

if ( Storage::disk('local')->put('attachments' . $filename, $extension) ) {
    $path = 'storage/attachments' . $filename;
}

答案 1 :(得分:0)

put() returns a boolean value,这就是为什么您在数据库列中看到1而不是存储文件的字符串路径的原因。您可能会想到putFile()