How to get the filename, when taking image from a remote server? And how to save with original size and filename?

// Take remote image
$img = Image::make('http://image.info/demo.jpg');
// how to save in the img/original/demo.jpg
$img->save(????);

I use Intervention, (http://image.intervention.io/api/make) to build CakePHP 3 image Behavior, I want to provide an easy uploading from remote servers, and keep the original image as a source for future manipulation.

EDIT

I ask, is there the Intervention Image method that returns the name of the file, when taken from the remote server. I know php copy(), I can also use the CakePHP File utilities, but it gives me the duplicate request on remote file.

2 Answers 正确答案

response() does not return the original filename like Salines was requesting. This should work

$path = 'https://i.stack.imgur.com/koFpQ.png';
$filename = basename($path);

Image::make($path)->save(public_path('images/' . $filename));

You can easily do it using the make(); and response(); methods. Check my code below.

Just keep in mind that allow_url_fopen must be enabled to fetch a remote image.

This will display my profile picture. If you are not using it with Laravel Framework, just replace return with echo.

$img = Image::make('https://i.stack.imgur.com/koFpQ.png');
header('Content-Type: image/png');
return $img->response();

Hope that helps and upvote my reply if useful ;)

If you need further help just ask.

  • I like it, no need to temporarily store on server. But I have a question. Is there a way to make it work for files in general? For example, my user can upload either a photo or a pdf document... how would I handle it? – Joe Yahchouchi May 16 '16 at 9:28

来自  https://stackoverflow.com/questions/32828606/intervention-image-save-image-directly-from-an-url-with-original-file-name-and


designheroes
Apr 19, 2017
  • Ten Thousand Strong Achievement

Storing image file retrieved from external url

Im retrieving images from an URL and i can't seem to use the build in store() function with the format i get the file in what could i use that works with the store function instead of the usual form posted file?

jekinney
Level 44

No you won't because your request doesn't have a file, it has a string.

You'll have to send a request to the provided URL to retrieve the image. Hint file_get_contents will help you.

http://php.net/manual/en/function.file-get-contents.php

designheroes
Level 6

Yea i know i just dont know how to save the "retrieved" file when its not submitted by a form.

jlucia
Level 5
jluciaApr 19, 2017
  • Ten Thousand Strong Achievement

Are you storing it on disk? This worked in my tester.

use Storage;
$url = "<a href="http://www.google.co.in/intl/en_com/images/srpr/logo1w.png" ;"="" target="_blank" rel="noreferrer noopener" style="border: none; box-sizing: inherit; background: 0px 0px; margin: 0px; padding: 0px; font-size: 12px; vertical-align: baseline; color: rgb(50, 138, 241); cursor: pointer; text-decoration-line: none; transition: background-color 0.3s ease 0s, border 0.3s ease 0s; font-weight: 700;">http://www.google.co.in/intl/en_com/images/srpr/logo1w.png";
$contents = file_get_contents($url);
$name = substr($url, strrpos($url, '/') + 1);
Storage::put($name, $contents);
designheroes
Level 6

Works perfect, thanks! Didn't know you could use that class :)

eXist73
Level 1

I'm generating Illuminate\Http\UploadedFile from urls, but this helped me get there. Heres my code for anything interested:

$info = pathinfo($url);
$contents = file_get_contents($url);
$file = '/tmp/' . $info['basename'];
file_put_contents($file, $contents);
$uploaded_file = new UploadedFile($file, $info['basename']);

Then I can run it through my controller logic the same way as if someone on my site uploaded it.

kenny11
Level 4

congrats

来自   https://laracasts.com/discuss/channels/laravel/storing-image-file-retrieved-from-external-url?page=1