如何在Laravel中创建下载链接

Bla*_*arl 11 download laravel-4

我在创建下载链接以从Laravel Storage文件夹通过移动应用程序下载文件时遇到问题.

我做了类似$link = Response::Download(storage_path()./file/example.png)但无济于事的事情.

我将文件移动到公共文件夹并使用http://domain.com/file/example.png,asset('file/example.png')但无济于事.

我正进入(状态 404 NOT FOUND ERROR

我该如何解决这个问题?

Lat*_*san 24

请查看Laravel Helpers文档:http://laravel.com/docs/4.2/helpers

如果您想要链接到您的资产,您可以这样做:

$download_link = link_to_asset('file/example.png');
Run Code Online (Sandbox Code Playgroud)

编辑

如果上面的方法不适合你,那么你可以在app/routes.php中实现一个相当简单的下载路由,如下所示:

请注意,此示例假定您的文件位于app/storage/file / location中

// 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\-\_\.]+');
Run Code Online (Sandbox Code Playgroud)

用法:http://your-domain.com/download/example.png

这将在:app/storage/file/example.png中查找文件(如果存在,则将文件发送到浏览器/客户端,否则将显示错误消息).

PS '[A-Za-z0-9\-\_\.]+此正则表达式,确保了用户只能请求与包含名称的文件 A-Za-z(字母), 0-9(数字),-_.(符号).其他一切都被丢弃/忽略.这是一项安全/保障措施....


Dyl*_*rce 7

更新Laravel 5.0及更高版本的答案:

<a href={{ asset('file/thing.png') }}>Thing</a>
Run Code Online (Sandbox Code Playgroud)