代码之家  ›  专栏  ›  技术社区  ›  angelique000

使用laravel和amazon s3显示“安全”图像的最快方式是什么?

  •  0
  • angelique000  · 技术社区  · 6 年前

    在我的laravel应用程序中,我有一个用于登录amazon s3的用户的图库。

    现在我以这种方式下载每个缩略图和图像:

    public function download($file_url){ // is safe, but slow...
        $mime = \Storage::disk('s3')->getDriver()->getMimetype($file_url);
        $size = \Storage::disk('s3')->getDriver()->getSize($file_url);
    
         $response =  [
             'Content-Type' => $mime,
             'Content-Length' => $size,
             'Content-Description' => 'File Transfer',
             'Content-Disposition' => "attachment; filename={$file_name}",
             'Content-Transfer-Encoding' => 'binary',
        ];
    
        return \Response::make(\Storage::disk('s3')->get($file_url), 200, $response);
    }
    

    这是安全的(因为我有一个路由器 middleware('auth') ,但非常服务器密集且速度慢。

    是否可以直接从Amazon下载文件:

    • 只为(在我的拉维尔)-loggedin用户(可能有一个临时下载链接)?
    • 只有一个安全的唯一链接?
    1 回复  |  直到 6 年前
        1
  •  2
  •   Jono20201    6 年前

    您可以使用临时URL:

    $url = Storage::disk('s3')->temporaryUrl(
        'file.jpg', now()->addMinutes(5)
    );
    

    第一个PARAM是S3上的路径,第二个PARAM是您希望URL工作多长时间。如果只希望url用于单页加载,请将此值设置为低值。

    https://laravel.com/docs/5.6/filesystem (在临时URL下)