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:
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:
ich habe auch versucht vagrant destroy
, nur für den Fall, aber das Problem blieb. In jedem Fall, danke für deine Zeit.
Haben Sie versucht, Antwort() -> download() '? – user2094178
@ 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