예제 #1
0
        internal override void Execute()
        {
            FileInfo   fi    = new FileInfo(filePath);
            FileStream input = File.OpenRead(filePath);

            string checksum = TreeHashGenerator.CalculateTreeHash(input);

            try
            {
                UploadArchiveRequest uploadRequest = new UploadArchiveRequest()
                                                     .WithAccountId(this.options.AccountId)
                                                     .WithArchiveDescription(archiveDescription)
                                                     .WithVaultName(vaultName)
                                                     .WithChecksum(checksum)
                                                     .WithBody(input);
                uploadRequest.StreamTransferProgress += this.ProgressCallback;
                uploadRequest.BeforeRequestEvent     += new UserAgentPostFix("SingleUpload").UserAgentRequestEventHandlerSync;

                UploadArchiveResult uploadArchiveResult =
                    this.manager.GlacierClient.UploadArchive(uploadRequest).UploadArchiveResult;
                string archiveId = uploadArchiveResult.ArchiveId;
                this.UploadResult = new UploadResult(archiveId, checksum);
            }
            finally
            {
                try { input.Close(); }
                catch (Exception) { }
            }
        }
예제 #2
0
        internal override void Execute()
        {
            FileStream input = File.OpenRead(filePath);

            string checksum = TreeHashGenerator.CalculateTreeHash(input);

            try
            {
                UploadArchiveRequest uploadRequest = new UploadArchiveRequest()
                {
                    AccountId          = this.options.AccountId,
                    ArchiveDescription = archiveDescription,
                    VaultName          = vaultName,
                    Checksum           = checksum,
                    Body = input
                };

                uploadRequest.StreamTransferProgress += this.ProgressCallback;
                uploadRequest.BeforeRequestEvent     += new UserAgentPostFix("SingleUpload").UserAgentRequestEventHandlerSync;

                UploadArchiveResponse uploadArchivResponse =
                    this.manager.GlacierClient.UploadArchive(uploadRequest);
                string archiveId = uploadArchivResponse.ArchiveId;
                this.UploadResult = new UploadResult(archiveId, checksum);
            }
            finally
            {
                try { input.Close(); }
                catch (Exception) { }
            }
        }
        internal override async Task ExecuteAsync()
        {
            FileStream input = File.OpenRead(filePath);

            string checksum = TreeHashGenerator.CalculateTreeHash(input);

            try
            {
                UploadArchiveRequest uploadRequest = new UploadArchiveRequest()
                {
                    AccountId          = this.options.AccountId,
                    ArchiveDescription = archiveDescription,
                    VaultName          = vaultName,
                    Checksum           = checksum,
                    Body = input
                };

                uploadRequest.StreamTransferProgress += this.ProgressCallback;
                ((Amazon.Runtime.Internal.IAmazonWebServiceRequest)uploadRequest).AddBeforeRequestHandler(new ArchiveTransferManager.UserAgentPostFix("SingleUpload").UserAgentRequestEventHandlerSync);

                UploadArchiveResponse uploadArchivResponse =
                    await this.manager.GlacierClient.UploadArchiveAsync(uploadRequest).ConfigureAwait(false);

                string archiveId = uploadArchivResponse.ArchiveId;
                this.UploadResult = new UploadResult(archiveId, checksum);
            }
            finally
            {
                try { input.Dispose(); }
                catch (Exception) { }
            }
        }
예제 #4
0
        public void UploadVaultArchive()
        {
            var stream = File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + "\\test.txt");
            UploadArchiveRequest request = new UploadArchiveRequest
            {
                VaultName          = vaultName,
                AccountId          = "-",
                ArchiveDescription = "test desc",
                Checksum           = TreeHashGenerator.CalculateTreeHash(stream),
                Body = stream
            };

            request.StreamTransferProgress += OnUploadProgress;
            var response = client.UploadArchive(request);

            if (response.HttpStatusCode.IsSuccess())
            {
                Console.WriteLine("Archive Uploaded successfully");
                Console.WriteLine($"RequestId: {response.ResponseMetadata.RequestId}");
                foreach (var item in response.ResponseMetadata.Metadata)
                {
                    Console.WriteLine($"{item.Key}:{item.Value}");
                }
            }
        }
예제 #5
0
        internal UploadArchiveResponse UploadArchive(UploadArchiveRequest request)
        {
            var marshaller   = new UploadArchiveRequestMarshaller();
            var unmarshaller = UploadArchiveResponseUnmarshaller.Instance;

            return(Invoke <UploadArchiveRequest, UploadArchiveResponse>(request, marshaller, unmarshaller));
        }
예제 #6
0
        private static string UploadArchive(AmazonGlacierClient glacier)
        {
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("data to archive"));

            string treeHash = TreeHashGenerator.CalculateTreeHash(ms);

            UploadArchiveRequest req = new UploadArchiveRequest();

            req.VaultName = vaultName;
            req.Body      = ms;
            req.Checksum  = treeHash;

            Task <UploadArchiveResponse> res = glacier.UploadArchiveAsync(req);

            Task.WaitAll(res);

            if (res.IsCompletedSuccessfully)
            {
                Console.WriteLine("ArchiveId: {0}", res.Result.ArchiveId);

                return(res.Result.ArchiveId);
            }
            else
            {
                return(string.Empty);
            }
        }
예제 #7
0
        // Commented out because the would leave data in glacier that would cost money
        //[TestMethod]
        //[TestCategory("Glacier")]
        public void TestSimpleUpload()
        {
            var testingVaultName = "dotnet-sdk-test" + DateTime.Now.Ticks.ToString();

            Client.CreateVault(new CreateVaultRequest()
            {
                VaultName = testingVaultName
            });
            const string accountID = "-";
            string       archiveID = null;

            try
            {
                var memoryStream         = new MemoryStream(Encoding.ASCII.GetBytes("data to archive"));
                var uploadArchiveRequest = new UploadArchiveRequest
                {
                    VaultName          = testingVaultName,
                    Body               = memoryStream,
                    Checksum           = TreeHashGenerator.CalculateTreeHash(memoryStream),
                    AccountId          = accountID,
                    ArchiveDescription = "my first archive"
                };

                var response = Client.UploadArchive(uploadArchiveRequest);
                archiveID = response.ArchiveId;
            }
            finally
            {
                Client.DeleteArchive(new DeleteArchiveRequest {
                    AccountId = accountID, VaultName = testingVaultName, ArchiveId = archiveID
                });
            }
        }
        public async Task TestSimpleUpload()
        {
            await Client.CreateVaultAsync(new CreateVaultRequest()
            {
                VaultName = testingVaultName
            }).ConfigureAwait(false);

            const string accountID = "-";
            string       archiveID = null;

            var memoryStream         = new MemoryStream(Encoding.ASCII.GetBytes("data to archive"));
            var uploadArchiveRequest = new UploadArchiveRequest
            {
                VaultName          = testingVaultName,
                Body               = memoryStream,
                Checksum           = TreeHashGenerator.CalculateTreeHash(memoryStream),
                AccountId          = accountID,
                ArchiveDescription = "my first archive"
            };

            var response = await Client.UploadArchiveAsync(uploadArchiveRequest).ConfigureAwait(false);

            archiveID = response.ArchiveId;

            await Client.DeleteArchiveAsync(new DeleteArchiveRequest { AccountId = accountID, VaultName = testingVaultName, ArchiveId = archiveID });
        }
예제 #9
0
파일: Glacier.cs 프로젝트: fiftin/oblqo
        public override async Task <StorageFile> UploadFileAsync(Stream fileStream, string fn, StorageFile destFolder,
                                                                 CancellationToken token, Action <TransferProgress> progressCallback)
        {
            var path = ((GlacierFile)destFolder).FolderPath;

            if (!string.IsNullOrEmpty(path) && !path.EndsWith("/"))
            {
                path += "/";
            }
            var filePathName = path + fn;
            var fileLen      = fileStream.CanSeek ? fileStream.Length : 0;
            var checksum     = await Task.Run(() => TreeHashGenerator.CalculateTreeHash(fileStream));

            var observed = new ObserverStream(fileStream);
            var percent  = 0;

            observed.PositionChanged += (sender, e) =>
            {
                var currentPercent = fileLen == 0 ? 0 : (int)(100 * ((Stream)sender).Position / (float)fileLen);
                if (currentPercent == percent)
                {
                    return;
                }
                percent = currentPercent;
                progressCallback(new TransferProgress(percent));
            };
            var req    = new UploadArchiveRequest(Vault, filePathName.Unidecode(), checksum, observed);
            var result = await client.UploadArchiveAsync(req, token);

            return(new GlacierFile(this, result.ArchiveId, false, fn));
        }
예제 #10
0
        /// <summary>
        /// Initiates the asynchronous execution of the UploadArchive operation.
        /// <seealso cref="Amazon.Glacier.IAmazonGlacier"/>
        /// </summary>
        ///
        /// <param name="request">Container for the necessary parameters to execute the UploadArchive operation.</param>
        /// <param name="cancellationToken">
        ///     A cancellation token that can be used by other objects or threads to receive notice of cancellation.
        /// </param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public Task <UploadArchiveResponse> UploadArchiveAsync(UploadArchiveRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
        {
            var marshaller   = new UploadArchiveRequestMarshaller();
            var unmarshaller = UploadArchiveResponseUnmarshaller.Instance;

            return(InvokeAsync <UploadArchiveRequest, UploadArchiveResponse>(request, marshaller,
                                                                             unmarshaller, cancellationToken));
        }
예제 #11
0
        public static Task <UploadArchiveResponse> UploadArchiveAsync(string vaultName, string archiveDescription, string checksum, Stream body)
        {
            using (var client = GetGlacierClient())
            {
                UploadArchiveRequest request = new UploadArchiveRequest(GetAccountId(), vaultName, archiveDescription, checksum, body);

                return(client.UploadArchiveAsync(request));
            }
        }
예제 #12
0
        public void UploadVaultObject()
        {
            try
            {
                var stream = File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + "\\example");
                UploadArchiveRequest request = new UploadArchiveRequest
                {
                    VaultName          = vaultName,
                    AccountId          = "",
                    ArchiveDescription = "Test Description Upload",
                    Body     = stream,
                    Checksum = TreeHashGenerator.CalculateTreeHash(stream)
                };

                request.StreamTransferProgress += OnUploadProgress;
                var response = client.UploadArchive(request);
                if (response.HttpStatusCode == System.Net.HttpStatusCode.Created)
                {
                    Console.WriteLine("Archive Upload Successsfully");
                    Console.WriteLine($"RequstId: {response.ResponseMetadata.RequestId}");
                    Console.WriteLine($"ArchiveID {response.ArchiveId}");
                    foreach (var item in response.ResponseMetadata.Metadata)
                    {
                        Console.WriteLine($"{item.Key} / {item.Value}");
                    }
                }
            }
            catch (AmazonGlacierException e)
            {
                Console.WriteLine(e.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }
예제 #13
0
        static string UploadArchive(IAmazonGlacier glacier)
        {
            var ms       = new MemoryStream(Encoding.UTF8.GetBytes("some data to archive"));
            var treeHash = TreeHashGenerator.CalculateTreeHash(ms);

            var req = new UploadArchiveRequest
            {
                VaultName = VaultName,
                Body      = ms,
                Checksum  = treeHash
            };

            Task <UploadArchiveResponse> res = glacier.UploadArchiveAsync(req);

            Task.WaitAll(res);

            if (res.IsCompletedSuccessfully)
            {
                Console.WriteLine($"Upload archive to ArchiveId {res.Result.ArchiveId}");
                return(res.Result.ArchiveId);
            }

            return(string.Empty);
        }
예제 #14
0
        public async Task <ImageUploadedModel> UploadImage(
            string bucketName,
            string bucketUrl,
            string objectKey,
            S3StorageClass storageClass,
            S3CannedACL permissions,
            string glacierVaultName,
            ImageInfo image)
        {
            ImageUploadedModel model = new ImageUploadedModel();

            try
            {
                PutObjectRequest putRequest = new PutObjectRequest
                {
                    BucketName      = bucketName,
                    Key             = objectKey,
                    StorageClass    = storageClass,
                    CannedACL       = permissions,
                    ContentType     = image.MimeType,
                    AutoCloseStream = false
                };

                putRequest.Metadata.Add("width", image.Width.ToString());
                putRequest.Metadata.Add("height", image.Height.ToString());

                putRequest.InputStream = image.Image;

                byte[] md5Hash = image.Image.Md5Hash();
                putRequest.MD5Digest = md5Hash.ToBase64String();

                PutObjectResponse response = await S3Client.PutObjectAsync(putRequest);

                string eTag         = response.ETag.Trim('"').ToLowerInvariant();
                string expectedETag = md5Hash.ToS3ETagString();

                if (eTag != expectedETag)
                {
                    throw new Exception("The eTag received from S3 doesn't match the eTag computed before uploading. This usually indicates that the image has been corrupted in transit.");
                }

                // upload to Glacier if needed
                if (!string.IsNullOrWhiteSpace(glacierVaultName))
                {
                    ArchiveDescription description = new ArchiveDescription
                    {
                        ObjectKey   = objectKey,
                        ContentType = image.MimeType,
                        Width       = image.Width,
                        Height      = image.Height
                    };

                    // reset stream position in image
                    image.Image.Position = 0;

                    UploadArchiveRequest glacierRequest = new UploadArchiveRequest
                    {
                        ArchiveDescription = JsonConvert.SerializeObject(description, Formatting.None),
                        Body      = image.Image,
                        VaultName = glacierVaultName,
                        Checksum  = TreeHashGenerator.CalculateTreeHash(image.Image)
                    };

                    UploadArchiveResponse glacierResponse = await GlacierClient.UploadArchiveAsync(glacierRequest);

                    model.ArchiveId  =  glacierResponse.ArchiveId;
                }

                model.ObjectKey      = objectKey;
                model.ETag           = eTag;
                model.ObjectLocation = bucketUrl + objectKey;
                model.VersionId      = response.VersionId;
            }
            catch (Exception ex)
            {
                model.Exception  =  ex;
            }

            return(model);
        }