Создание ссылок с истекающим сроком действия на контент, размещенный на S3 или Cloudfront, с помощью ASP .Net
-
05-07-2019 - |
Вопрос
У кого-нибудь есть пример создания подписанного URL-адреса с истечением срока действия с использованием ASP .Net?Я изучаю использование Лиц3 или Трехгранный в моем проекте и не видел никаких конкретных методов для этого ни в одном из этих проектов.Спасибо.
Решение
Вот что сработало у меня с AWS SDK и MVC 3 (на основе ответов выше и того, что я нашел на http://www.ec2studio.com/articles/s3.html):
public ActionResult GetS3Object(string bucket, string key)
{
string accessKeyID = ConfigurationManager.AppSettings["AWSAccessKey"];
string secretAccessKeyID = ConfigurationManager.AppSettings["AWSSecretKey"];
using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKeyID, secretAccessKeyID))
{
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
.WithBucketName(bucket)
.WithKey(key)
.WithExpires(DateTime.Now.Add(new TimeSpan(7, 0, 0, 0)));
return Redirect(client.GetPreSignedURL(request));
}
}
Другие советы
с помощью Amazon SDK .NET вы можете получить preSignedUrl
using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client("your access key ID", "you secret key"))
{
GetPreSignedUrlRequest getPreSignedUrl = new GetPreSignedUrlRequest().WithBucketName(bucketName);
getPreSignedUrl.Key = key;
getPreSignedUrl.Expires = DateTime.Now.AddSeconds(60);
}
Найдено этот (упоминается в этой теме в дискуссионные форумы AWS) библиотека классов для создания подписанных URL-адресов в Amazon S3. Если у кого-то есть какие-либо дополнительные предложения / методы, попробуйте, дайте мне знать. Р>
Редактировать: ThreeSharp обладает функциональностью, которую я искал. Из приложения ThreeSharpConsoleSample:
using (UrlGetRequest request = new UrlGetRequest("mytestbucket", "mytestfile.txt"))
{
request.ExpiresIn = 60 * 10000;
using (UrlGetResponse response = service.UrlGet(request))
{
Console.WriteLine("Try this url in your web browser (it will only work for 60 seconds)\n");
string url = response.StreamResponseToString();
Console.WriteLine(url);
}
}
Console.WriteLine("\npress enter >");
Console.ReadLine();