Как с помощью PHP отображать защищенные изображения Amazon S3 на моем защищенном сайте?

Путем я сделал, это путем создания тонкой обертки Управляемого С++ вокруг моего неуправляемого DLL C++. Управляемая оболочка содержит классы "прокси", которые переносят неуправляемый код, представляющий интерфейс, это необходимо приложению.NET. Это немного удваивает работу, но она позволяет довольно бесшовную операцию в нормальных средах. Вещи действительно становятся более хитрыми с зависимостями при некоторых обстоятельствах (таких как ASP.NET), но Вы, вероятно, не столкнетесь с этим.

27
задан Bob 2 March 2011 в 19:54
поделиться

2 ответа

Вы можете загрузить содержимое из S3 (в сценарии PHP), а затем обработать его, используя правильные заголовки.

В качестве грубого примера, скажем, у вас было следующее в image.php:

$s3 = new AmazonS3();
$response = $s3->get_object($bucket, $image_name);
if (!$response->isOK()) {
    throw new Exception('Error downloading file from S3');
}
header("Content-Type: image/jpeg");
header("Content-Length: " . strlen($response->body));
die($response->body);

Тогда в вашем HTML-коде вы можете сделать

<img src="image.php">
0
ответ дан 28 November 2019 в 05:35
поделиться

Вы можете использовать политики корзины в своей корзине Amazon, чтобы позволить домену вашего приложения получить доступ к файлу. На самом деле, вы даже можете добавить свой локальный домен разработчика (например, mylocaldomain.local) в список доступа, и вы сможете получить свои изображения. Amazon предоставляет примеры политик корзины здесь: http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html . Это было очень полезно, чтобы помочь мне обслуживать мои изображения.

Приведенная ниже политика решила проблему, которая привела меня к этой теме SO:

    {
       "Version":"2008-10-17",
       "Id":"http referer policy example",
       "Statement":[
    {
      "Sid":"Allow get requests originated from www.example.com and example.com",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":{
        "StringLike":{
          "aws:Referer":[
            "http://www.example.com/*",
            "http://example.com/*"
          ]
        }
      }
    }
  ]
}
9
ответ дан 28 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: