【问题标题】:Image is saving as tmp file in database laravel图像在数据库 laravel 中保存为 tmp 文件
【发布时间】:2016-04-29 06:00:24
【问题描述】:

在解释问题之前。让我展示一下控制器功能:

public function storePost(IdeaRequest $request)
{
   $idea = new Idea();
   $idea->idea_title       = $request->input('idea_title');
   $idea->user_id          = $request->input('user_id');
   $idea->idea_image       = $request->file('idea_image')->move('publicPages\images')->getClientOriginalName();
   $idea->idea_info        = $request->input('idea_info');
   $idea->selection        = $request->input('selection');
   $idea->idea_location    = $request->input('idea_location');
   $idea->idea_goal        = $request->input('idea_goal');
   $idea->idea_description = $request->input('idea_description');
   $idea->save();
   session()->flash('flash_message', 'Your idea has been submitted for Review');
   return back();
}

它将图像存储为 .tmp 文件。我尝试过的东西

  • guessExtension(),只返回扩展名,不返回 甚至存储图像。

  • getClientOriginalName(),会抛出错误; getClientOriginalName 方法未定义。我已经搜索过 方法,它就在那里。使用了它的命名空间 Symfony\Component\HttpFoundation\File\UploadedFile。那没起效 要么。

  • stackoverflow 尝试了不同的东西,没有任何效果 对我来说直到现在。换句话说,我投入了大量时间 解决这个问题,但没有任何效果。任何帮助都会非常重要 感激不尽。

【问题讨论】:

  • 试试$file = $request->file('idea_image'); 然后使用$fileName=$file->getFilename(); 看看你会得到什么

标签: php mysql laravel laravel-5 laravel-5.2


【解决方案1】:

给你:

public function storePost(IdeaRequest $request)
{
   $request->file('idea_image')->move('publicPages\images');
   $filename = $request->file('idea_image')->getClientOriginalName();

   $idea = new Idea();
   $idea->idea_title       = $request->input('idea_title');
   $idea->user_id          = $request->input('user_id');
   $idea->idea_image       = $filename;
   $idea->idea_info        = $request->input('idea_info');
   $idea->selection        = $request->input('selection');
   $idea->idea_location    = $request->input('idea_location');
   $idea->idea_goal        = $request->input('idea_goal');
   $idea->idea_description = $request->input('idea_description');
   $idea->save();
   session()->flash('flash_message', 'Your idea has been submitted for Review');
   return back();
}

仔细观察。您必须分两行执行此操作:

$request->file('idea_image')->move('publicPages\images');
$filename = $request->file('idea_image')->getClientOriginalName();

为什么?

move() 返回一个代表新文件的File 对象。

File 类没有getClientOriginalName() 方法。该方法属于UploadedFile

当您链接它们时,您正试图从不存在的File 访问getClientOriginalName()。查看文档here

但是...

File 扩展了 PHP 原生的 SplFileInfo class,它有一个 getFilename() 方法。所以我想你也可以这样做:

$request->file('idea_image')->move('publicPages\images')->getFilename();

【讨论】:

  • 非常感谢!我尝试了您给定的代码,但有时可以。我不知道为什么。当我将这两行更改为 $request->file('idea_image')->move('publicPages\images'); $filename = $request->file('idea_image')->getClientOriginalName(); to $filename = $request->file('idea_image')->getClientOriginalName(); $moveImage = $request->file('idea_image')->move('images', $filename); 再次感谢您:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2021-03-02
  • 2020-06-01
  • 1970-01-01
  • 2018-09-25
相关资源
最近更新 更多