Beispiel #1
0
 public string GetMomentUrl(Moment moment)
 {
     return(S3Client.GetPreSignedURL(new GetPreSignedUrlRequest()
     {
         BucketName = Constants.S3BucketName,
         Key = moment.MomentId,
         Expires = DateTime.UtcNow.AddHours(1)
     }));
 }
Beispiel #2
0
        public async Task <MetaData> GenerateThumbnail(MetaData metaData, ILambdaContext context)
        {
            metaData.Thumbnail = new Thumbnail
            {
                BucketName  = "image-thumbnails-lab04",
                ImageName   = "resized-" + metaData.ImageName,
                ContentType = metaData.ContentType
            };

            using (var response = await S3Client.GetObjectAsync(metaData.BucketName, metaData.ImageName))
                using (var responseStream = response.ResponseStream)
                    using (var stream = new MemoryStream())
                    {
                        responseStream.CopyTo(stream);
                        stream.Position = 0;


                        GcBitmap bitmap        = new GcBitmap(stream);
                        var      newHeight     = 120;
                        var      newWidth      = ImageUtilities.ScaleWidth((int)bitmap.Height, newHeight, (int)bitmap.Width);
                        var      resizedBitmap = bitmap.Resize(newWidth, newHeight, InterpolationMode.NearestNeighbor);

                        var ms = new MemoryStream();
                        resizedBitmap.SaveAsJpeg(ms);

                        PutObjectRequest putRequest = new PutObjectRequest
                        {
                            BucketName  = metaData.Thumbnail.BucketName,
                            Key         = metaData.Thumbnail.ImageName,
                            InputStream = ms,
                            ContentType = metaData.Thumbnail.ContentType,
                        };

                        // Put object
                        PutObjectResponse putResponse = await S3Client.PutObjectAsync(putRequest);
                    };

            // Get url Address
            GetPreSignedUrlRequest requestUrl = new GetPreSignedUrlRequest();

            requestUrl.BucketName = metaData.Thumbnail.BucketName;
            requestUrl.Key        = metaData.Thumbnail.ImageName;
            requestUrl.Expires    = DateTime.Now.Add(new TimeSpan(1, 0, 0, 0));
            string Url = S3Client.GetPreSignedURL(requestUrl);

            metaData.Thumbnail.Url = Url.Substring(0, Url.IndexOf('?'));

            return(metaData);
        }
Beispiel #3
0
        public virtual Task <string> GetPreSignedUrlAsync(string fullFileName)
        {
            CheckDisposed();

            if (string.IsNullOrWhiteSpace(fullFileName))
            {
                throw new ArgumentNullException(nameof(fullFileName));
            }

            var request = new GetPreSignedUrlRequest
            {
                BucketName = BucketName,
                Key        = AdjustKey(fullFileName),
                Expires    = DateTime.UtcNow.AddMinutes(10)
            };

            return(Task.FromResult(S3Client.GetPreSignedURL(request)));
        }
Beispiel #4
0
        /// <summary>
        /// Retrieves an URL with the appropriate signature to access the file for a predetermined amount of time
        /// </summary>
        /// <param name="BucketName">S3 bucket name</param>
        /// <param name="Key">S3 object key</param>
        /// <param name="expirationInMinutes">Expiration of link in minutes</param>
        /// <returns>The URL that can be used to access the file</returns>
        public string GetS3SignedUrl(string BucketName, string Key, int expirationInMinutes)
        {
            if (!IsS3Valid)
            {
                return(null);
            }

            string url = null;

            S3FileInfo s3FileInfo = new Amazon.S3.IO.S3FileInfo(S3Client, BucketName, Key);

            if (s3FileInfo.Exists)
            {
                url = S3Client.GetPreSignedURL(new GetPreSignedUrlRequest
                {
                    BucketName = BucketName,
                    Key        = Key,
                    Expires    = DateTime.UtcNow.AddMinutes(expirationInMinutes)
                                 //ResponseHeaderOverrides = new ResponseHeaderOverrides() { ContentDisposition = "attachment; filename=\"test.txt\"", }
                });
            }

            return(url);
        }
Beispiel #5
0
        public MetaData ExtractImageMetaData(Root input, ILambdaContext context)
        {
            MetaData metaData = new MetaData();


            string bucketARN  = input.detail.resources.First(x => x.type.Equals("AWS::S3::Bucket")).ARN;
            string objectARN  = input.detail.resources.First(x => x.type.Equals("AWS::S3::Object")).ARN;
            string bucketName = bucketARN.Substring(bucketARN.LastIndexOf(":") + 1);
            string objectKey  = objectARN.Substring(objectARN.LastIndexOf("/") + 1);

            Console.WriteLine($"Bucket: {bucketName}, Object: {objectKey}");

            if (!SupportedImageTypes.Contains(Path.GetExtension(objectKey)))
            {
                Console.WriteLine($"Object {bucketName}:{objectKey} is not a supported image type");
                metaData.ImageSupported = false;
            }
            else
            {
                // Get url Address
                GetPreSignedUrlRequest requestUrl = new GetPreSignedUrlRequest();
                requestUrl.BucketName = bucketName;
                requestUrl.Key        = objectKey;
                requestUrl.Expires    = DateTime.Now.Add(new TimeSpan(1, 0, 0, 0));
                string Url = S3Client.GetPreSignedURL(requestUrl);


                metaData.Url            = Url.Substring(0, Url.IndexOf('?'));
                metaData.BucketName     = bucketName;
                metaData.ImageName      = objectKey;
                metaData.ContentType    = "image/" + Path.GetExtension(objectKey).Substring(1);
                metaData.ImageSupported = true;
            }

            return(metaData);
        }