2013-07-21 3 views
4

OK, поэтому, когда я хочу загрузить изображение. Я обычно делаю что-то вроде:Laravel 4 получить изображение с url

$file = Input::file('image'); 
$destinationPath = 'whereEver'; 
$filename = $file->getClientOriginalName(); 
$uploadSuccess = Input::file('image')->move($destinationPath, $filename); 

if($uploadSuccess) { 
    // save the url 
} 

Это прекрасно работает, когда пользователь загружает изображение. Но как сохранить изображение с URL-адреса ???

Если я пытаюсь что-то вроде:

$url = 'http://www.whereEver.com/some/image'; 
$file = file_get_contents($url); 

, а затем:

$filename = $file->getClientOriginalName(); 
$uploadSuccess = Input::file('image')->move($destinationPath, $filename); 

Я получаю следующее сообщение об ошибке:

Call to a member function move() on a non-object 

Итак, как же я могу загрузить изображение из URL с laravel 4 ??

Помощник Эми очень благодарен.

ответ

1

Laravel's Input :: файл метод используется, когда вы загружаете файлы по запросу POST Я думаю. Ошибка, которую вы получаете, потому что file_get_contents не возвращает вам класс laravel. И вам не нужно использовать метод move() или его аналог, потому что файл, который вы получаете из url, не загружается в вашу папку tmp.

Вместо этого, я думаю, вы должны использовать PHP upload an image file through url, что описано здесь.

Как:

// Your file 
$file = 'http://....'; 

// Open the file to get existing content 
$data = file_get_contents($file); 

// New file 
$new = '/var/www/uploads/'; 

// Write the contents back to a new file 
file_put_contents($new, $data); 

Я не могу проверить это прямо сейчас, но это, кажется, как не плохое решение. Просто получить данные из URL, а затем сохранить его везде, где вы хотите

+1

$ новых должны быть именем файла, а не каталог –

1
 $url = "http://example.com/123.jpg"; 
     $url_arr = explode ('/', $url); 
     $ct = count($url_arr); 
     $name = $url_arr[$ct-1]; 
     $name_div = explode('.', $name); 
     $ct_dot = count($name_div); 
     $img_type = $name_div[$ct_dot -1]; 

     $destinationPath = public_path().'/img/'.$name; 
     file_put_contents($destinationPath, file_get_contents($url)); 

это позволит сохранить изображение на свой/Public/IMG, имя файла будет исходное имя файла, который 123.jpg для вышеприведенного случая.

имени изображений прибудут перешедших из here

10

Я не знаю, если это поможет вам много, но вы можете захотеть взглянуть на Intervention Library. Он изначально предназначен для использования в качестве библиотеки манипуляции изображений, но это обеспечивает сохранение изображения из URL:

$image = Image::make('http://someurl.com/image.jpg')->save('/path/saveAsImageName.jpg'); 
+0

Этот пакет делает работу. – Ali

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