使用 Laravel 和 Amazon s3 显示 "secure" 图像的最快方法是什么?
What is the most fast way to show "secure" images with Laravel and Amazon s3?
在我的 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 中)登录的用户(可能需要临时下载 link)?
- OR 仅使用安全唯一 link?
您可以使用临时 URLs:
$url = Storage::disk('s3')->temporaryUrl(
'file.jpg', now()->addMinutes(5)
);
第一个参数是 S3 上的路径,第二个参数是您希望 URL 工作多长时间。如果您只希望 URL 用于单个页面加载,请将此设置为较低的值。
https://laravel.com/docs/5.6/filesystem(在临时 URLs 下)
在我的 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 中)登录的用户(可能需要临时下载 link)?
- OR 仅使用安全唯一 link?
您可以使用临时 URLs:
$url = Storage::disk('s3')->temporaryUrl(
'file.jpg', now()->addMinutes(5)
);
第一个参数是 S3 上的路径,第二个参数是您希望 URL 工作多长时间。如果您只希望 URL 用于单个页面加载,请将此设置为较低的值。
https://laravel.com/docs/5.6/filesystem(在临时 URLs 下)