【问题标题】:How to save file details into DB in Laravel 5.1如何在 Laravel 5.1 中将文件详细信息保存到数据库中
【发布时间】:2018-02-09 20:11:23
【问题描述】:

我正在尝试将上传文件的详细信息插入到数据库表中,但出现以下错误:

致命错误:调用未定义的方法 Symfony\Component\Finder\SplFileInfo::getClientOriginalName()

如何在 Laravel5 中获取文件的 getClientOriginalName()getClientOriginalName()getFilename()

下面是我正在使用的代码。

public function add() 
{
  $directory = public_path('xml');

  $files = File::allFiles($directory);
  foreach ($files as $file) {
    $entry = new Xmlentry();
    $entry->mime = $file->getClientMimeType();
    $entry->original_filename = $file->getClientOriginalName();
    $entry->filename = $file->getFilename().'.'.$extension;
    $entry->save();
  }
}

【问题讨论】:

  • dd($files) 输出什么?
  • 打印array:1 [ 0 => SplFileInfo {#164 -relativePath: "" -relativePathname: "145629930664170.xml" }
  • 我认为问题在于这些方法是UploadedFile 类的一部分,而不是SplFileInfo。但是,您可以使用以下方式将一个转换为另一个:new Symfony\Component\HttpFoundation\File\UploadedFile($files[0]->getFilename(),$files[0]->getPath());
  • 如果目录中有数千个文件,如何将其放入上面的代码中?
  • 我把我的回复作为答案,因为评论太混乱了:)

标签: php laravel laravel-5.1


【解决方案1】:

我有点困惑为什么你有 getClientOriginalName() 在那里,因为这是针对已上传的临时文件名,但 File::allFiles() 正在从已经具有固定名称的目录中获取文件。

除了我上面的 cmets,我想补充一下,你可以使用 SplFileInfo 方法。

我冒昧地从代码中删除了原始文件名,并更正了变量 $extension 缺少赋值语句。

回答你的问题:

public function add() 
{
  $directory = public_path('xml');

  $files = File::allFiles($directory);
  foreach ($files as $file) {
    $entry = new Xmlentry();
    $entry->mime = $file->getType();
    $entry->filename = $file->getFilename(). '.' . $file->getExtension();
    $entry->save();
  }
}

【讨论】:

  • 这就是我想要的。你就是最棒的。
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
相关资源
最近更新 更多