2016-05-10 6 views
0

Ich bin ein wenig verwirrt hier mit dieser Storage VS öffentlichen Pfaden in Laravel 5> ... Mein Verständnis ist, sollte Storage:: anstelle von File:: für das Schreiben von Dateien in den Storage-Ordner Zukunft der Nutzung von Cloud-Diensten wie Amazon usw. verwenden Also ich versuche, ein jpg in einen der storage/app Ordner mit Intervention zu setzen und diesen Code:Speicherpfad nicht schreibbar in Laravel mit Intervention?

public function apply(Request $request) 
    { 

     $user = Auth::user(); 

     $path = '/users/'.$user->id; 

     if (!Storage::exists($path)) 
     { 
      Storage::makeDirectory ($path, $mode = 0755, $recursive = false, $force = false);; 
     } 


       Image::make($request->file('image')) 
        ->orientate() 
        ->resize(600, null, function ($constraint) { 
         $constraint->aspectRatio(); 
        }) 
        ->resizeCanvas(600, 600, 'center', false, 'ffffff') 
        ->save($path.'/foo.jpg'); 


    } 

Zunächst einmal bin ich nicht sicher die !Storage::exists($path) alles tun wird, wie die API für die Speicherung sagt es nicht, wird für Verzeichnisse, wie sollte ich überprüfen, ob ein Verzeichnis existiert? Sekunde dd(is_writable($path)); return false, und in der Tat läuft dieser Code in

NotWritableException in Image.php line 143: 
Can't write image data to path 

Fehler. also wie soll das geschehen?

+0

Hat Ihr Speicherverzeichnis Schreibrechte? – Abhishek

+0

Ich glaube Intervention SAVE-Funktion kann hier nicht funktionieren. Dennoch kann ich nicht verstehen, wie man die Datei mit Storage auf die lokale Festplatte schreibt, nachdem das $ image Objekt als $ image = (Interventionsdatei) – Chriz74

+0

erstellt wurde, und benutze File facade statt Storage. mehr Infos: http://laravel-recipes.com/categories/20 –

Antwort

1

Der "Trick", den ich verwendet habe, war, das Bild direkt im Temp-Pfad zu manipulieren und dann im Speicherordner mit der Laravel-Speichermethode zu speichern.

$tempFile = $request->file('image')->getRealPath(); 

Image::make($tempFile) 
    ->resize(100, 100) 
    ->save($tempFile); // Note that we are saving back to temporary path 

// Now we can proceed and send the manipulated file to it's final destination 
// in '/storage/app/public/uploads' 
$path = $request->file('image')->storePublicly('public/uploads'); 
Verwandte Themen