2016-06-24 18 views
2

Was ich tun wollte, ist, meine privaten Dateien zu schützen, so dass nur ihre Besitzer darauf zugreifen können. Ich änderte meine öffentliche Festplatte Speicherordner:Ich kann keine Dateiantwort für den Speicherordner in Laravel 5.2 auf Homestead senden.

'orders' => [ 
    'driver' => 'local', 
    'root' => storage_path('files/orders'), 
], 

und erstellt einen gefräste Controller in der Lage sein, Dateien privat zu machen (ich absichtlich diese Logik aus dem Beispiel nicht inbegriffen):

Route::get('files/{slug}', [ 
    'as' => 'get.file', 
    'uses' => '[email protected]', 
]); 

class FileController extends Controller 
{ 
    public function getFile($slug) 
    { 
     // I use spatie/laravel-medialibrary 
     // to manage file uploads. 
     $media = Media::where('slug', $slug)->first(); 

     return response()->file($media->getPath()); 
    } 
} 

Die getPath() ist ein spatie/laravel-medialibrary Methode, die den richtigen Pfad zu der Datei zurückgibt: /home/vagrant/code/project/storage/files/orders/2/b414a7416571145ea9dcf9bda9a845a2.jpg. Es findet eindeutig die Datei, weil ich \Symfony\Component\HttpFoundation\File\File() verwenden kann, um Dateien Daten wie ihren Mime-Typ oder ihre Größe zu erhalten (und auch keinen 404-Fehler als eine Antwort bekommen); wenn ich folge, sagt sie, http://localhost:3000/files/2RmYR3 Route ich diese leeren 200-Antwort-sieht aus wie so:

enter image description here

Eine Person so ziemlich den gleichen Code auf seinem Ende getestet, und es funktionierte, aber er war auf Valet, also könnte es ein Homestead-Problem sein. Er schlug auch vor, dass es ein Problem mit Headern geben könnte, und ich versuchte, verschiedene Header zu senden (content-type/length, zum Beispiel), aber nichts half, also bitte sehen, was ich empfange, ohne irgendwelche Header für die Antwort anzugeben:

enter image description here

ich habe auch versucht vagrant destroy, nur für den Fall, aber das Problem blieb. In jedem Fall, danke für deine Zeit.

+0

Haben Sie versucht, Antwort() -> download() '? – user2094178

+0

@ user2094178 Ich habe es heruntergeladen, eine Datei, ist ihre Größe korrekt, aber es ist kaputt, und kann nicht angezeigt oder geöffnet werden. – Banandrew

Antwort

0

Es löste sich auf. Ich fing an, Stücke aus der Anwendung zu entfernen, um zu verstehen, welcher Teil des Codes mit Antworten verwechselt wurde, zuerst dachte ich, es sei mein View-Composer, aber nein; Ich habe eine neue separate Laravel-Installation erstellt und config/app.php von der Neuinstallation in mein Projekt kopiert und dann einfach die Liste der Anbieter und Aliase aktualisiert, die ich zuvor hatte, und das war es.

Meine app.php fehlte 'log_level' => env('APP_LOG_LEVEL', 'debug'), Zeile, die irgendwann zu Laravel hinzugefügt wurde, nachdem ich das Projekt gestartet habe, und vielleicht deshalb Antworten nicht richtig funktioniert, aber ich bezweifle es.