用Laravel和Amazon s3显示“安全”图像的最快方法是什么?

时间:2018-06-22 11:55:55

标签: laravel amazon-web-services laravel-5 amazon-s3 amazon

在我的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下载文件:

  • 仅适用于(在我的Laravel中)已登录的用户(可能带有临时下载链接)?
  • 仅具有安全的唯一链接?

1 个答案:

答案 0 :(得分:2)

您可以使用临时URL:

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

第一个参数是S3上的路径,第二个参数是您希望URL工作多长时间。如果只希望URL在单个页面加载时起作用,请将其设置为较低的值。

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