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

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中尝试了不同的方法,没有任何效果
直到现在换句话说,我花了很多时间
解决了这个问题,但没有任何效果。任何帮助都将是
赞赏。

最佳答案

干得好:

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();
}


仔细观察。您将必须在2行中执行此操作:

$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();

关于php - 图像另存为tmp文件在数据库laravel中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36924681/

10-10 13:02