来自S3的图像的永久URL而不显示S3存储桶中的图像路径

时间:2018-02-02 05:23:04

标签: php amazon-web-services amazon-s3 s3-bucket

我是AWS S3 Service的新手,并且正在开发像Dropbox这样的项目。现在我想用PHP存储S3中的所有图像,目前,我使用S3预先指定的URL到PUT Image。现在我想向用户显示图像。我找到了两种方法:

  1. 让公众访问S3 Bucket(我不想这样做)。
  2. GET对象的预签名URL。 (但用户可以查看目录结构)
  3. 我希望像永久URL一样查看图像,但不显示S3 Bucket中的图像路径。例如,目前URL的结构如下:

    domain.com ///

    但我想要这样的事情:

    domain.com/ 某些代码就像是从s3存储桶目录中获取图像的指针。请给我一个提示。

    提前致谢

1 个答案:

答案 0 :(得分:1)

您可以使用此脚本作为代理,使用php curl从S3获取图像。

$bucket = 'bucketname';
$filename = 'somefile.jpg';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://s3-<region>.amazonaws.com/' . $bucket . '/' . $filename);
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
curl_close($ch);

header("Content-Length: " . strlen($data));
echo $data;

例如,与.htaccess RewriteRule合并,然后您的s3存储桶网址被隐藏,只需获取此网址http://example.com/resources/images/somefile.jpg

等资源
RewriteRule ^resources/images/([^/]+)$ /proxy.php?filename=$1 [QSA,L]