2014-02-13 3 views
0

Моя загрузка изображений не работает:изображения форма загрузки Laravel

Контроллер:

if (Input::hasFile('image')) { 
     $bikecreate->image = Input::file('image'); 
     $destinationPath = public_path().'/upload/'; 
     $filename = str_random(6) . '_' . $bikecreate->users_id ; 
     Input::file('image')->move($destinationPath, $filename); 
    } 

Форма:

{{ Form::file('image', array('files' => true)) }} 

После принятия формы все выглядит нормально, но после окончания загрузки , filepath в базе данных показывает .tmp/файл на моем сервере.

ответ

1

Не видя остальной части вашего кода, трудно понять, что происходит, но я предполагаю, что ваша линия $bikecreate->image = Input::file('image') - это то, где вы устанавливаете путь файла к базе данных. Фактически вы установили экземпляр UploadedFile как image на $bikecreate там, который, предположительно, сериализован, чтобы что-то помещать в базу данных, получает на него __toString().

__toString() называется на File инстанции (который сам наследует __toString от SplFileInfo возвращает путь к этому файлу. Так что вы думаете, что вы получите закачанное имя файла, но на самом деле, потому что загруженный файл на самом деле временный файл в PHP , вы получите временное имя

Попробуйте изменить эту строку следующим образом:..

$bikecreate->image = Input::file('image')->getClientOriginalName(); 

Это возвращает фактическое оригинальное имя загружаемого файла, а не временный путь дал ему PHP

Само собой разумеется, что это относится только к UploadedFile, нормальные файлы должны быть в состоянии быть __toString ed, чтобы получить путь к файлу, хотя вы заметите, что это будет полный путь, а не базовое. Для этого используйте getBaseName().

+0

Это работает! Спасибо ! :) – user3305675

Смежные вопросы