首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问公用文件夹之外的文件

访问公用文件夹之外的文件
EN

Stack Overflow用户
提问于 2014-04-10 23:47:10
回答 1查看 1.4K关注 0票数 0

我想存储只能由Laravel访问的文件(pdf、图像、视频)。这将迫使用户使用网站而不是url。

我如何才能做到这一点?有没有做到这一点的最佳实践?

谢谢!

下面是我的代码:

代码语言:javascript
运行
复制
public static function downloadFile($id){
        $file = FileManager::find($id);
        //$file->location = ../app/storage/file/dam04/2-2/manual.pdf
        //file->type = pdf
        //file->name = instructor manual
        $headers = array(
              'Content-Type:'.mime_content_type($file->location),
            );
        return Response::download($file->location, $file->name.'.'.$file->type, $headers);

        //exit;
     }

我不能把它烧起来。这些文件位于app/storage/中。

我真的需要一些建议来解释为什么这个方法行不通。谢谢,

EN

回答 1

Stack Overflow用户

发布于 2014-04-11 00:04:13

您可以使用Response::download()

创建路由器:

代码语言:javascript
运行
复制
Route::get('/files/{fileName}', 'FileServerController@download');

在你的控制器中,你可以做到

代码语言:javascript
运行
复制
class FileServerController extends Controller {

    public function download($fileName)
    {
        if (file_exists("$basepath/$fileName"))
        {
            return Response::download("$basepath/$fileName");
        }

        return Redirect::route('home')->withMessage('file not found');

        // or return Response::make('File not found', 404);
    }

}

您可以对您的路由进行身份验证:

代码语言:javascript
运行
复制
Route::get('/files/{fileName}', ['before' => 'auth', 'uses' => 'FileServerController@download']);

而且,只要用户登录,就可以使用intended()开始下载文件:

代码语言:javascript
运行
复制
if (Auth::attempt(...))
{
   return Redirect::intended('home');
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22992833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档