图像在数据库laravel中保存为tmp文件

时间:2016-04-28 20:16:34

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

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

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尝试了不同的事情,没有任何效果 对我来说直到现在。换句话说,我投入了大量时间 解决这个问题但没有任何效果。任何帮助都很高 赞赏。

1 个答案:

答案 0 :(得分: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

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

<强>然而...

File扩展了具有getFilename()方法的PHP原生SplFileInfo class。所以我猜你也可以这样做:

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