如何在Laravel中创建下载链接

时间:2014-11-17 11:26:28

标签: laravel-4 download

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

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

我已将文件移至公用文件夹并使用http://domain.com/file/example.pngasset('file/example.png'),但无济于事。

我正在404 NOT FOUND ERROR

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:23)

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

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

$download_link = link_to_asset('file/example.png');

修改

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

请注意,此示例假设您的文件位于 app / storage / file / 位置

// 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中查找文件(如果存在,将文件发送到浏览器/客户端,否则将显示错误消息)。

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

答案 1 :(得分:6)

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

<a href={{ asset('file/thing.png') }}>Thing</a>

答案 2 :(得分:0)

您不需要任何路由或控制器。只要给它锚标签。

 <a href="{{URL::to('/')}}/file/example.png" target="_blank">
     <button class="btn"><i class="fa fa-download"></i> Download</button>
 </a>

答案 3 :(得分:0)

您不需要任何路由或控制器。只需将其提供给anchor标签。

 <a href="{{URL::to('/')}}/file/example.png" target="_blank">
     <button class="btn"><i class="fa fa-download"></i> Download File</button>
 </a>