Ejemplo n.º 1
0
        public async Task <IActionResult> Download(int id)
        {
            if (id == 0)
            {
                return(Content("File not found"));
            }

            var userId = userManager.GetUserId(HttpContext.User);
            var result = dbContext.OcrElements.Where(x => x.UserId == userId && x.Id == id).FirstOrDefault();

            if (result == null)
            {
                return(Content("File not found"));
            }

            var memory          = new MemoryStream();
            var downloadRequest = new TransferUtilityOpenStreamRequest
            {
                Key        = result.ImageFilenamePath,
                BucketName = _awsAccess.S3BucketName,
            };

            using (var stream = fileTransferUtility.OpenStream(downloadRequest))
            {
                await stream.CopyToAsync(memory);
            }
            memory.Position = 0;

            return(File(memory, result.ImageFileContentType, result.ImageFilename));
        }
Ejemplo n.º 2
0
        public Stream getMyFilesFromS3(string bucketName, string subDirectoryInBucket, string fileNameInS3)
        {
            string         accessKey = "AKIAWXS64BGGY47QHRWQ";
            string         secretKey = "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";
            AmazonS3Client client    = new AmazonS3Client(accessKey, secretKey, RegionEndpoint.USEast2);
            // input explained :
            // localFilePath = the full local file path e.g. "c:\mydir\mysubdir\myfilename.zip"
            // bucketName : the name of the bucket in S3 ,the bucket should be alreadt created
            // subDirectoryInBucket : if this string is not empty the file will be uploaded to
            // a subdirectory with this name
            // fileNameInS3 = the file name in the S3
            // create an instance of IAmazonS3 class ,in my case i choose RegionEndpoint.EUWest1
            // you can change that to APNortheast1 , APSoutheast1 , APSoutheast2 , CNNorth1
            // SAEast1 , USEast1 , USGovCloudWest1 , USWest1 , USWest2 . this choice will not
            // store your file in a different cloud storage but (i think) it differ in performance
            // depending on your location
            //IAmazonS3 client = new AmazonS3Client(RegionEndpoint.USEast2);
            // create a TransferUtility instance passing it the IAmazonS3 created in the first step
            TransferUtility utility = new TransferUtility(client);
            // making a TransferUtilityUploadRequest instance
            TransferUtilityOpenStreamRequest request = new TransferUtilityOpenStreamRequest();

            if (subDirectoryInBucket == "" || subDirectoryInBucket == null)
            {
                request.BucketName = bucketName; //no subdirectory just bucket name
            }
            else
            {   // subdirectory and bucket name
                request.BucketName = bucketName + @"/" + subDirectoryInBucket;
            }
            request.Key = fileNameInS3;                  //file name up in S3
            Stream stream = utility.OpenStream(request); //commensing the transfer

            return(stream);                              //indicate that the file was sent
        }
        /// <summary>
        /// Gets the download stream for a specific content..
        /// </summary>
        /// <param name="content">Descriptor of the item on the remote blob storage.</param>
        /// <returns>The binary stream of the content item.</returns>
        public override Stream GetDownloadStream(IBlobContent content)
        {
            TransferUtilityOpenStreamRequest request = new TransferUtilityOpenStreamRequest()
                                                       .WithBucketName(this.bucketName).WithKey(content.FilePath);
            var stream = this.transferUtility.OpenStream(request);

            return(stream);
        }
Ejemplo n.º 4
0
        public void ServerSideEncryptionBYOKTransferUtility()
        {
            var bucketName = S3TestUtils.CreateBucket(Client);

            try
            {
                Aes aesEncryption = Aes.Create();
                aesEncryption.KeySize = 256;
                aesEncryption.GenerateKey();
                string base64Key = Convert.ToBase64String(aesEncryption.Key);

                TransferUtility utility = new TransferUtility(Client);

                var uploadRequest = new TransferUtilityUploadRequest
                {
                    BucketName = bucketName,
                    Key        = key,
                    ServerSideEncryptionCustomerMethod      = ServerSideEncryptionCustomerMethod.AES256,
                    ServerSideEncryptionCustomerProvidedKey = base64Key
                };

                uploadRequest.InputStream = new MemoryStream(UTF8Encoding.UTF8.GetBytes("Encrypted Content"));

                utility.Upload(uploadRequest);

                GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = bucketName,
                    Key        = key,

                    ServerSideEncryptionCustomerMethod      = ServerSideEncryptionCustomerMethod.AES256,
                    ServerSideEncryptionCustomerProvidedKey = base64Key
                };

                GetObjectMetadataResponse getObjectMetadataResponse = Client.GetObjectMetadata(getObjectMetadataRequest);
                Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256, getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);

                var openRequest = new TransferUtilityOpenStreamRequest
                {
                    BucketName = bucketName,
                    Key        = key,

                    ServerSideEncryptionCustomerMethod      = ServerSideEncryptionCustomerMethod.AES256,
                    ServerSideEncryptionCustomerProvidedKey = base64Key
                };

                using (var stream = new StreamReader(utility.OpenStream(openRequest)))
                {
                    var content = stream.ReadToEnd();
                    Assert.AreEqual(content, "Encrypted Content");
                }
            }
            finally
            {
                AmazonS3Util.DeleteS3BucketWithObjects(Client, bucketName);
            }
        }
Ejemplo n.º 5
0
        public Stream DownloadStream(string bucketName, string fileName)
        {
            var request = new TransferUtilityOpenStreamRequest()
            {
                BucketName = bucketName,
                Key        = fileName,
            };

            return(base.CreateDefaultRetryPolicy().Execute(() => new TransferUtility(S3Client).OpenStream(request)));
        }
Ejemplo n.º 6
0
        public async Task <Stream> DownloadStreamAsync(string bucketName, string fileName, CancellationToken cancellationToken = default)
        {
            var request = new TransferUtilityOpenStreamRequest()
            {
                BucketName = bucketName,
                Key        = fileName,
            };

            var policy = base.CreateDefaultRetryAsyncPolicy();

            return(await policy.ExecuteAsync(async() => await new TransferUtility(S3Client).OpenStreamAsync(request, cancellationToken)));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Opens a stream of the content from Amazon S3
        /// </summary>
        /// <param name="key">The key under which the Amazon S3 object is stored.</param>
        /// <param name="version">The identifier for the specific version of the object to be downloaded, if required.</param>
        /// <param name="settings">The <see cref="DownloadSettings"/> required to download from Amazon S3.</param>
        /// <returns>A stream.</returns>
        public Stream Open(string key, string version, DownloadSettings settings)
        {
            TransferUtility utility = this.GetUtility(settings);
            TransferUtilityOpenStreamRequest request = this.CreateOpenRequest(settings);

            request.Key = key;
            if (!String.IsNullOrEmpty(version))
            {
                request.VersionId = version;
            }

            _Log.Verbose("Opening stream {0} from bucket {1}...", key, settings.BucketName);
            return(utility.OpenStream(request));
        }
Ejemplo n.º 8
0
        public async Task <Stream> StreamFileDownload(string path, string bucket = null)
        {
            var finalBucket = bucket ?? DefaultBucket;

            if (string.IsNullOrWhiteSpace(finalBucket))
            {
                throw new Exception("S3 Bucket Is Required");
            }
            using var utility = new TransferUtility(s3Client);
            var request = new TransferUtilityOpenStreamRequest
            {
                BucketName = finalBucket,
                Key        = path
            };

            return(await utility.OpenStreamAsync(request));
        }
Ejemplo n.º 9
0
        public byte[] DownloadFileByteContents(string remoteFilename)
        {
            byte[] buffer = null;

            TransferUtilityOpenStreamRequest req = new TransferUtilityOpenStreamRequest();

            req.BucketName = CurrentBucketName;
            req.Key        = remoteFilename;

            using (Stream s = _transfer.OpenStream(req))
            {
                buffer     = new byte[s.Length];
                s.Position = 0;
                s.Read(buffer, 0, (int)s.Length);
                s.Flush();
            }
            return(buffer);
        }
Ejemplo n.º 10
0
        private TransferUtilityOpenStreamRequest CreateOpenRequest(DownloadSettings settings)
        {
            TransferUtilityOpenStreamRequest request = new TransferUtilityOpenStreamRequest();

            request.BucketName = settings.BucketName;

            request.ServerSideEncryptionCustomerProvidedKey    = settings.EncryptionKey;
            request.ServerSideEncryptionCustomerProvidedKeyMD5 = settings.EncryptionKeyMD5;
            request.ServerSideEncryptionCustomerMethod         = settings.EncryptionMethod;

            if (!String.IsNullOrEmpty(settings.EncryptionKey))
            {
                request.ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256;
            }

            request.ModifiedSinceDate = settings.ModifiedDate;

            return(request);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Get file from s3 bucket
        /// </summary>
        /// <param name="bucketName">bucket name</param>
        /// <param name="key">s3 key -  path + file name</param>
        /// <returns><see cref="MemoryStream"/>Memory file object</returns>
        public async Task <MemoryStream> DownloadMemoryStreamAsync(string bucketName, string key)
        {
            var memory = new MemoryStream();

            try
            {
                var streamRequest = new TransferUtilityOpenStreamRequest
                {
                    BucketName = bucketName,
                    Key        = key
                };

                var request = new GetObjectRequest()
                {
                    BucketName = bucketName,
                    Key        = key
                };

                using (var transferUtility = new TransferUtility(_s3Client))
                {
                    var objectResponse = await transferUtility.S3Client.GetObjectAsync(request);

                    var stream = objectResponse.ResponseStream;

                    await stream.CopyToAsync(memory);
                }

                memory.Position = 0;

                return(memory);
            }
            catch (AmazonS3Exception e)
            {
                Console.Write("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.Write("Download fail", e.Message);
            }

            return(memory);
        }
Ejemplo n.º 12
0
        public async Task <Stream> GetPhotoAsync(string userId, string key, bool isThumbnail)
        {
            var user = await this.userClient.GetUserAsync(userId);

            if (user?.PhotoKeys == null || !user.PhotoKeys.Any())
            {
                return(null);
            }

            var details = user.PhotoKeys.FirstOrDefault(d => string.Equals(d.Key, key, StringComparison.OrdinalIgnoreCase));
            var photo   = this.photoFactory.BuildPhoto(userId, details);

            var downloadRequest = new TransferUtilityOpenStreamRequest
            {
                BucketName = "novelgram",
                Key        = GetKey(photo, isThumbnail)
            };

            return(await this.transferUtility.OpenStreamAsync(downloadRequest));
        }
Ejemplo n.º 13
0
        public static async Task <Stream> GetFile(string FileId)
        {
            try
            {
                TransferUtilityOpenStreamRequest request = new TransferUtilityOpenStreamRequest();
                request.BucketName = Config.S3BucketName;
                request.Key        = FileId;

                return(await S3Utility.OpenStreamAsync(request));
            }
            catch (Exception e)
            {
                if (Globals.Config.IsDebug)
                {
                    Console.WriteLine("[S3] " + e.ToString());
                }

                return(null);
            }
        }
 internal OpenStreamCommand(AmazonS3 s3Client, TransferUtilityOpenStreamRequest request)
 {
     this._s3Client = s3Client;
     this._request  = request;
 }
Ejemplo n.º 15
0
 internal OpenStreamCommand(AmazonS3 s3Client, TransferUtilityOpenStreamRequest request)
 {
     this._s3Client = s3Client;
     this._request = request;
 }