Laravelでダウンロードリンクを作成する方法 質問する

Laravelでダウンロードリンクを作成する方法 質問する

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-Za-z0-9-_.

おすすめ記事