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

Permanent URLs of images from S3 without showing the path of image in S3 bucket

我是 AWS S3 服务的新手,正在从事像 Dropbox 这样的项目。现在我想用 PHP 将所有图像存储在 S3 中,目前,我正在使用预签名 URL 的 S3 来放置图像。现在我想向用户展示图像。我找到了 2 种方法来做到这一点:

  1. 授予 public 对 S3 存储桶的访问权限(我不想这样做)。
  2. GET 对象的预签名 URLs。 (但用户可以查看目录结构)

我想要永久 URLs 之类的东西来查看图像,但不显示图像在 S3 存储桶中的路径。例如,目前 URL 的结构如下:

domain.com///?

但我想要这样的东西:

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

提前致谢

您可以使用此脚本作为代理,使用 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 存储桶 url 被隐藏并且可以简单地获取这样的资源 url http://example.com/resources/images/somefile.jpg

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