2017-06-19 4 views
0

私のストレージフォルダにファイルをダウンロードする際に問題が発生しました。エラーメッセージは表示されません。起こるのは404ページへのリダイレクトだけです。ファイルが与えられたパスに存在するので、私は困惑しています。私はresponse()の第2引数から$ documentを削除しようとしましたが、うまくいきませんでした。私は何をする必要がありますか?不思議なことに、ローカルホスト上で動作している場合は動作しますか?Laravelファイルのダウンロード

public function download(Request $request, $document) 
{ 
    $pathToFile = storage_path() . '/' . 'app/documents/client'.'/'.$document; 
    if (file_exists($pathToFile)) 
    {  
     return response()->download($pathToFile, $document); 
    } 
    else 
    { 
     // Error 
     return redirect('errors.404'); 
    } 
} 

ファイルシステム

'disks' => [ 

     'local' => [ 
      'driver' => 'local', 
      'root' => storage_path('app'), 
     ], 

     'public' => [ 
      'driver' => 'local', 
      'root' => storage_path('app/public'), 
      'visibility' => 'public', 
     ], 

ルート:ここ

Route::get('documents/client/{document}',  '[email protected]')->name('client.docs'); 
+0

'$ pathToFile'を記録して、実際に存在するかどうか、およびアクセス許可を確認してください。 – aynber

+0

ファイルが正しい場所に存在することを確認しますか? –

+0

ファイルが存在します。しかし、このルートは正しいですか?質問で更新されました –

答えて

0

は、それが役立つことが誰にファイルをダウンロードするためのアプローチです。

最初の問題は、アンカータグのhrefがURLへのリンクを作成していたが、ドキュメントがStorage内にあったために通常のURLでアクセスできなかったことです。その後、コードは404にリダイレクトされ、URLリソースを見つけることができませんでした(Storageは公開されていません)。 hrefはコントローラに要求を送信しないため、コントローラは要求を受信しませんでした。

フォームアクションを使用すると、コントローラにダウンロード要求が送信され、コントローラからGETがStorageから処理されます。

<form action="{{ route('client.docs', [$document->document]) }}" method="GET" role="form" id="form" > 
{{ csrf_field() }} 
<input type="hidden" placeholder="{{ $document->document}}" > 
    <button class="btn btn-xs btn-primary" type="submit"> 
    Download<i class="fa fa-arrow-circle-down"></i> 
    </button> 
</form> 
関連する問題