Путем я сделал, это путем создания тонкой обертки Управляемого С++ вокруг моего неуправляемого DLL C++. Управляемая оболочка содержит классы "прокси", которые переносят неуправляемый код, представляющий интерфейс, это необходимо приложению.NET. Это немного удваивает работу, но она позволяет довольно бесшовную операцию в нормальных средах. Вещи действительно становятся более хитрыми с зависимостями при некоторых обстоятельствах (таких как ASP.NET), но Вы, вероятно, не столкнетесь с этим.
Вы можете загрузить содержимое из 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">
Вы можете использовать политики корзины в своей корзине 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/*"
]
}
}
}
]
}