【问题标题】:What is the most fast way to show "secure" images with Laravel and Amazon s3?使用 Laravel 和 Amazon s3 显示“安全”图像的最快方法是什么?
【发布时间】:2018-06-22 11:55:54
【问题描述】:

在我的 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') 的路由器,但是服务器非常密集且速度很慢。

是否可以直接从亚马逊下载文件:

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

【问题讨论】:

  • 您可以使用预签名 URL 共享对象。您的服务器将为给定对象和用户会话创建签名 URL,然后共享该 URL,从而允许网页直接从 S3 检索对象。见docs.aws.amazon.com/AmazonS3/latest/dev/…

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


【解决方案1】:

您可以使用临时 URL:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2015-07-25
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-12-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多