2016-12-15 2 views
0

У меня есть код ниже, он успешно перемещает файл по желаемому пути. Моя проблема в том, что в db она всегда сохранялась как (/ tmp/phpI9zJ1F) со случайными символами после tmp /. Как решить эту проблему?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()'? Трудно сказать без деталей модели Quiz и кода вида/формы. – Donkarnash

+0

Я нашел решение, имя файла (survey_image), на мой взгляд, похоже на поле db, которое вызывает путаницу. Поэтому я переименовал его и решил. – Ikong

ответ

1

Вы должны использовать replace() или merge() для того, чтобы переопределить значение в $request.

$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, 
     ]); 
    } 

Если вы хотите использовать свой код, вы можете сделать что-то вроде: (.! Ps Код не проверял)

/** 
* 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/'); 
]); 
Смежные вопросы