4 Stimmen

Laravel 4 erhält Bild von URL

OK, wenn ich ein Bild hochladen möchte, mache ich normalerweise folgendes:

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

if( $uploadSuccess ) {
    // speichere die URL
}

Dies funktioniert gut, wenn der Benutzer das Bild hochlädt. Aber wie speichere ich ein Bild von einer URL??

Wenn ich etwas wie folgt versuche:

$url = 'http://www.woAuchImmer.com/irgendwo/bild';
$file = file_get_contents($url);

und dann:

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

erhalte ich den folgenden Fehler:

Aufruf einer Memberfunktion move() auf ein Nicht-Objekt

Also, wie lade ich ein Bild von einer URL mit Laravel 4 hoch??

Jede Hilfe wird sehr geschätzt.

11voto

dcizal Punkte 111

Ich weiß nicht, ob dir das wirklich helfen wird, aber du könntest dir die Intervention Library anschauen. Sie ist ursprünglich als Bildbearbeitungsbibliothek gedacht, bietet aber auch die Möglichkeit, ein Bild von einer URL zu speichern:

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

2voto

Ninjoe Quah Punkte 389
        $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));

dies speichert das Bild in Ihrem /public/img, der Dateiname wird der Originaldateiname sein, der für den obigen Fall 123.jpg ist.

der Bildname wird von hier referenziert

1voto

Victor Punkte 4989

Die Methode Input::file von Laravel wird meiner Meinung nach nur verwendet, wenn Sie Dateien per POST-Anfrage hochladen. Der Fehler, den Sie erhalten, liegt daran, dass file_get_contents nicht die Klasse von Laravel zurückgibt. Und Sie müssen die Methode move() oder deren Analogon nicht verwenden, da die Datei, die Sie von der URL erhalten, nicht in Ihrem tmp-Ordner hochgeladen wird.

Stattdessen denke ich, dass Sie PHP ein Bild über die URL hochladen sollten, wie hier beschrieben.

Wie:

// Ihre Datei
$file = 'http://....';

// Öffnen Sie die Datei, um den vorhandenen Inhalt zu erhalten
$data = file_get_contents($file);

// Neue Datei
$new = '/var/www/uploads/';

// Schreiben Sie den Inhalt in eine neue Datei
file_put_contents($new, $data);

Ich kann es gerade nicht überprüfen, aber es scheint keine schlechte Lösung zu sein. Holen Sie einfach Daten von der URL und speichern Sie sie dann, wo immer Sie möchten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X