2016-12-15 142 views
0

下面我有我的代码,它成功地移动文件所需的路径。我的问题是,在db中它总是像tmp /后的随机字符一样保存为(/ tmp/phpI9zJ1F)。我该如何解决这个问题?Laravel 5.2文件上传总是(/ tmp目录)保存在DB

$quiz = Quiz::findOrFail($id); 
     $tmp = ''; 

     if($request->hasFile('survey_image')) 
     { 
      $extension = $request->file('survey_image')->getClientOriginalExtension(); 

      do{ 
       $rand = rand(11111,99999); 
       $imageName = $rand.'.'.$extension; 
       $tmp = $imageName; 
       $is_duplicate = Quiz::where('survey_image', $imageName)->count(); 
      } 
      while($is_duplicate!=0); 

      $request['survey_image'] = (string)$tmp; 
      $quiz->survey_image_path = 'images/surveys/'; 
     } 

     $request->file('survey_image')->move(
       'images/surveys/' , $tmp); 

     $quiz->update($request->all()); 
+1

“Quiz”模型中的哪个字段存储图像路径?你的'$ request-> all()'包含了什么?很难说没有测验模型和视图/表单代码的细节。 – Donkarnash

+0

我找到解决方案,在我看来,文件名(survey_image)是类似的数据库字段造成混乱。所以我重新命名了它并解决了它。 – Ikong

回答

1

您将需要以覆盖$request要使用的值replace()merge()

$request->replace(array('survey_image' => (string)$tmp)); 
1

你没有解释太多,但我相信这是一种只更新图像的方法。

所以,我会做这样的事情:

$quiz = Quiz::findOrFail($id); 
    $tmp = ''; 

    if($request->hasFile('survey_image')) 
    { 
     $extension = $request->file('survey_image')->getClientOriginalExtension(); 

     do{ 
      $rand = rand(11111,99999); 
      $imageName = $rand.'.'.$extension; 
      $tmp = $imageName; 
      $is_duplicate = Quiz::where('survey_image', $imageName)->count(); 
     } 
     while($is_duplicate!=0); 

     $request['survey_image'] = (string)$tmp; 
     $quiz->survey_image_path = 'images/surveys/'; 


     $request->file('survey_image')->move(
      $quiz->survey_image_path , $tmp); 

     $quiz->update([ 
      'survey_image' => '/'.$quiz->survey_image_path.$imageName, 
     ]); 
    } 

如果你想重用代码,你可以这样做:(!诗篇代码未测试)

/** 
* Handle File Upload 
* @param UploadedFile $file   [File from request] 
* @param string   $path   [Path where to save the file] 
* @param string|boolean $current_file [An old file that you want to delete, before save the new one] 
* @return string 
*/ 
public function updateImage(UploadedFile $file, $path, $current_file = false) 
{ 
    //Set a random name to the file 
    $extension = $file->getClientOriginalExtension(); 
    $fileName = str_random(32) . '.' . $extension; 

    //Delete an old file first 
    if ($current_file !== false) 
     if (File::exists($current_file)) 
      File::delete($current_file); 

    //Move new file to the directory 
    $file->move($path, $fileName); 

    return '/'.$path.$imageName; 
} 

而且您想要在数据库上保存的位置:

if(!$request->hasFile('survey_image')) return false; //Or what you want 

$quiz = Quiz::findOrFail($id); 

$quiz->update([ 
    'survey_image' => $this->updateImage(request('survey_image'), 'images/surveys/'); 
]);