Laravel 4从网址获取图片

时间:2013-07-21 19:56:42

标签: image upload laravel laravel-4

好的,当我想上传图片时。我经常这样做:

$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

那么,我如何使用laravel 4上传图像?

艾米非常感谢。

3 个答案:

答案 0 :(得分:10)

我不知道这会对你有多大帮助,但你可能想看看Intervention Library。它最初打算用作图像处理库,但它提供了来自url的保存图像:

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

答案 1 :(得分:2)

        $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,filename将是原始文件名,对于上述情况为123.jpg。

here

引用的获取图片名称

答案 2 :(得分:1)

Laravel的Input :: file方法仅在您通过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);

我现在无法检查它,但它似乎不是一个糟糕的解决方案。只需从网址获取数据,然后随时将其保存