2017-12-16 4 views
0

Ich habe Probleme mit Laravel Abrufen von Bildern und in der Lage, diese Bilder in meinem Controller zu verwenden.Laravel abrufen Bild aus dem Speicher und konnte nicht öffnen Stream: Keine solche Datei oder Verzeichnis

ich überprüfen, zuerst sicherstellen, dass das Bild vorhanden ist, die wahre

var_dump(storage::disk('local')->exists('image.png')) 

zurück, wenn ich das tun

$file = Storage::disk('local')->get('image.png'); 
var_dump(pathinfo($file)); 

i

array(2) { 
    ["basename"]=> 
    string(0) "" 
    ["filename"]=> 
    string(0) "" 
} 

Gerade var_dump() ing diese Ausgabe erhalten Die $file gibt mir eine leere Zeichenfolge

Wenn ich dies tun

$file = Storage::disk('local')->url('image.png'); 
var_dump(pathinfo($file)); 

i bekommen

array(4) { 
    ["dirname"]=> 
    string(8) "/storage" 
    ["basename"]=> 
    string(9) "image.png" 
    ["extension"]=> 
    string(3) "png" 
    ["filename"]=> 
    string(5) "image" 
} 

Ich will nicht, um die Eigenschaften kennen, muss ich der Lage zu nutzen sein, dass Bild tatsächlich gespeichert und an einer anderen API zu laden.

Wenn ich versuchen und tun

echo '<img src="'.$file.'">'; 

i erhalten diese in der Source-Browser kann aber kein Bild sehen

<img src="/storage/image.png"> 

Die API i dieses Bild kehrt laden bin mit

mime_content_type(/storage/image.png): failed to open stream: No such file or directory 

Ich bin davon überzeugt, sobald ich das eigentliche Bild bekommen kann, wird der Rest

arbeiten

EDIT:

ich diesen Befehl php artisan storage:link

Wenn i $file = public_path('uploads/image.png'); und kopieren Sie die Datei in den öffentlichen Ordner verwenden ausgeführt haben (nicht Speicher/app/public), ich bin in der Lage, das Bild zu verwenden, wie ich will

Dies ist nicht ideal, da ich nicht möchte, dass die Bilder öffentlich zugänglich sind. Ich muss auf das Bild aus dem Speicherordner zugreifen können.

Wenn ich $file = Storage::disk('public')->get('image.jpg'); laufen bekomme ich mime_content_type(): Invalid path

ich Latein am Ende bin versucht, einen Pfad zu dem Bild an dem API ich verwenden müssen, zu senden. Alles was es braucht ist /the/path/to/the/image

Andere Code i Ergebnisse in einem 403 versucht haben, wenn sie versuchen, das Bild

Antwort

0

Der /storage Ordner außerhalb des öffentlichen Verzeichnisses zu erhalten, die das Dokument/Web-Root des Web-Servers ist. Die Öffentlichkeit hat keinen Zugriff auf den Ordner /storage. Sie sollten eine Antwort geben, um den Bildinhalt auszugeben.

$path = storage_path() . "/app/image.png"; 
$file = File::get($path); 
$type = File::mimeType($path); 
$response = Response::make($file, 200); 
$response->header("Content-Type", $type); 
return $response; 
+0

Ich bekomme jetzt 'Datei existiert nicht im Pfad/var/www/vhosts/mysite.com/httpdocs/storage/image.jpg' – AdRock

+0

könnte im App-Ordner '$ path = storage_path() gespeichert werden. "/app/image.png"; überprüfen Sie dies: https://laravel.com/docs/5.5/filesystem#the-local-driver – Ben

Verwandte Themen