如何限制响应:基于路由过滤器下载?

时间:2015-01-09 17:03:49

标签: php laravel laravel-4 routes

详细

  • 我使用的是Laravel 4.0
  • 我不确定为什么我的所有用户徽标都无法加载
  • 我100%确定我在正确的路径上有这些标识。
  • 除了网址/api/url/decode
  • 之外,它们在我的整个应用程序中都能正常显示
  • 我想允许/files/logo_path/{id} url,如果他们为我提供了我设置的正确的api_key。
  • 请再次注意,所有人都无法访问网址= /files/logo_path/{id}

  • 有人能告诉我这里做错了什么吗?

这就是我试过的

routes.php文件

// API
Route::group(array('prefix' => 'api'), function(){
    Route::get('url', array('before' => 'api', 'uses' => 'UrlController@index'));
    Route::get('url/decode', 'UrlController@decode');

    Route::get('files/logo_path/{id}', function($id)
        {
            $logo_path = app_path() . '/files/logo_path/' . User::find($id)->logo_path;
            return Response::download($logo_path);
        });
});

filters.php

// API
Route::filter('api', function() {

    if (Input::get('key') != '*********')
    {
        return Response::view('errors.404', array(), 404);
    }
});

结果

enter image description here

更新

<img id="Company Logo" src="/files/logo_path/{{{ $distributor['user']['id'] or '' }}}" alt="logo" height="60px" width="200px">

1 个答案:

答案 0 :(得分:0)

您的问题与过滤器无关。问题是您如何尝试显示数据。

Response::download()是要求浏览器提示用户保存或打开文件。

但是你将这个链接代码放在img<> html中 - 用于在页面上内嵌显示图像。

他们不能混在一起。

如果您想让用户只下载允许他们访问的图片,您可以保持当前路线不变 - 但将视图代码更改为

<a href="{{{ /files/logo_path/{{{ $distributor['user']['id'] or '' }}}""> Click here to download your file</a>

如果您想允许用户在页面上查看图像(仅当他们有权访问时) - 那么您可以将视图代码保持不变:

<img id="Company Logo" src="/files/logo_path/{{{ $distributor['user']['id'] or '' }}}" alt="logo" height="60px" width="200px">

但是将路线代码更改为:

Route::get('files/logo_path/{id}', function($id)
        {
            $logo_path = app_path() . '/files/logo_path/' . User::find($id)->logo_path;
            return file_get_contents($logo_path);
        });