Laravel Storage フォルダーからモバイル アプリ経由でファイルをダウンロードするためのダウンロード リンクを作成するときに問題が発生しています。
のようなことをしました$link = Response::Download(storage_path()./file/example.png)
が、効果はありませんでした。
ファイルをパブリック フォルダーに移動して使用しましたhttp://domain.com/file/example.png
が、asset('file/example.png')
効果はありませんでした。
私は404 NOT FOUND ERROR
これをどうやって解決すればいいでしょうか?
ベストアンサー1
Laravel Helpers のドキュメントをご覧ください:ヘルプ
アセットへのリンクが必要な場合は、次のようにします。
$download_link = link_to_asset('file/example.png');
編集
上記の方法がうまくいかない場合は、かなりシンプルなダウンロードルートを実装することができます。アプリ/ルート.phpこれは次のようになります:
この例では、ファイルが次の場所にあることを前提としています。アプリ/ストレージ/ファイル/位置
// Download Route
Route::get('download/{filename}', function($filename)
{
// Check if file exists in app/storage/file folder
$file_path = storage_path() .'/file/'. $filename;
if (file_exists($file_path))
{
// Send Download
return Response::download($file_path, $filename, [
'Content-Length: '. filesize($file_path)
]);
}
else
{
// Error
exit('Requested file does not exist on our server!');
}
})
->where('filename', '[A-Za-z0-9\-\_\.]+');
使用法:http://your-domain.com/download/example.png
これは、app/storage/file/example.png 内のファイルを検索します (存在する場合は、ファイルをブラウザ/クライアントに送信し、存在しない場合はエラー メッセージが表示されます)。
PSこの正規表現により、ユーザーは名前にor (文字)、(数字)、またはor (記号)'[A-Za-z0-9\-\_\.]+
を含むファイルのみを要求できるようになります。その他はすべて破棄/無視されます。これは安全/セキュリティ対策です。A-Z
a-z
0-9
-
_
.