コード例 #1
0
ファイル: Ds3Client.cs プロジェクト: GtJosh/ds3_net_sdk
 public void PutObject(PutObjectRequest request)
 {
     using (var response = _netLayer.Invoke(request))
     {
         ResponseParseUtilities.HandleStatusCode(response, HttpStatusCode.OK);
     }
 }
コード例 #2
0
        public void Transfer(IDs3Client client, string bucketName, string objectName, long blobOffset, Guid jobId,
            IEnumerable<Range> ranges, Stream stream, IMetadataAccess metadataAccess,
            Action<string, IDictionary<string, string>> metadataListener, int objectTransferAttempts)
        {
            var currentTry = 0;

            while (true)
            {
                var request = new PutObjectRequest(bucketName, objectName, stream)
                    .WithJob(jobId)
                    .WithOffset(blobOffset);

                if (blobOffset == 0 && metadataAccess != null)
                {
                    request.WithMetadata(MetadataUtils.GetUriEscapeMetadata(metadataAccess.GetMetadataValue(objectName)));
                }

                try
                {
                    client.PutObject(request);
                    return;
                }
                catch (Exception ex)
                {
                    if (ExceptionClassifier.IsRecoverableException(ex))
                    {
                        BestEffort.ModifyForRetry(stream, objectTransferAttempts, ref currentTry, request.ObjectName, request.Offset.Value, ex);
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
コード例 #3
0
        public void Transfer(TransferStrategyOptions transferStrategyOptions)
        {
            var currentTry = 0;

            while (true)
            {
                var request = new PutObjectRequest(transferStrategyOptions.BucketName, transferStrategyOptions.ObjectName, transferStrategyOptions.Stream)
                    .WithJob(transferStrategyOptions.JobId)
                    .WithOffset(transferStrategyOptions.BlobOffset);

                if (transferStrategyOptions.BlobOffset == 0 && transferStrategyOptions.MetadataAccess != null)
                {
                    request.WithMetadata(MetadataUtils.GetUriEscapeMetadata(transferStrategyOptions.MetadataAccess.GetMetadataValue(transferStrategyOptions.ObjectName)));
                }

                if (transferStrategyOptions.Checksum != null)
                {
                    request.WithChecksum(transferStrategyOptions.Checksum, transferStrategyOptions.ChecksumType);
                }

                try
                {
                    transferStrategyOptions.Client.PutObject(request);
                    return;
                }
                catch (Exception ex)
                {
                    if (ExceptionClassifier.IsRecoverableException(ex))
                    {
                        BestEffort.ModifyForRetry(transferStrategyOptions.Stream, transferStrategyOptions.ObjectTransferAttempts, ref currentTry, request.ObjectName, request.Offset.Value, ex);
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
コード例 #4
0
        protected void runPutWithChecksum(string bucket, string srcDirectory, string filename, 
                                          string hashString = null, 
                                          Checksum.ChecksumType checksumType = Checksum.ChecksumType.Md5)
        {
            _helpers.EnsureBucketExists(bucket);

            FileInfo fileInfo = new FileInfo(Path.Combine(srcDirectory, filename));
            var ds3Obj = new Ds3Object(filename, fileInfo.Length);
            var ds3Objs = new List<Ds3Object>();
            ds3Objs.Add(ds3Obj);

            // create a job
            var job = _helpers.StartWriteJob(bucket, ds3Objs);

            // instantiate a PutObjectRequest
            FileStream fs = File.Open(srcDirectory + Path.DirectorySeparatorChar + filename, FileMode.Open);
            PutObjectRequest putRequest = new PutObjectRequest(bucket, filename, job.JobId, 0L, fs);
            if (string.IsNullOrEmpty(hashString))
            {
                // Compute checksum
                putRequest.WithChecksum(Checksum.Compute, checksumType);
            }
            else
            {
                // or pass in a precomputed Base64 string representation of the hash
                putRequest.WithChecksum(Checksum.Value(Convert.FromBase64String(hashString)), checksumType);
            }
            _client.PutObject(putRequest);
            fs.Close();
        }
コード例 #5
0
        private void PutObject(IDs3Client client, JobObject obj, JobResponse bulkResult)
        {
            var fileToPut = File.OpenRead(testDirectoryBigFolderForMaxBlob + obj.Name);
            var contentStream = new PutObjectRequestStream(fileToPut, obj.Offset, obj.Length);
            var putObjectRequest = new PutObjectRequest(
                bulkResult.BucketName,
                obj.Name,
                bulkResult.JobId,
                obj.Offset,
                contentStream
                );

            client.PutObject(putObjectRequest);
            fileToPut.Close();
        }
コード例 #6
0
        public void TestPutWithBadChecksum()
        {
            // "123456789" has a well known checksum
            string content = "123456789";
            string testBadChecksumCrc32C = "4awSwg=="; // transposed two pairs

            Ds3Object testObject = new Ds3Object("numbers_badcrc.txt", 9);
            var ds3Objs = new List<Ds3Object>();
            ds3Objs.Add(testObject);


            using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)))
            {
                // create or ensure bucket
                _helpers.EnsureBucketExists(TESTBUCKET);
                // create a job
                var job = _helpers.StartWriteJob(TESTBUCKET, ds3Objs);
                PutObjectRequest putRequest = new PutObjectRequest(TESTBUCKET, testObject.Name, job.JobId, 0L, stream);
                putRequest.WithChecksum(Checksum.Value(Convert.FromBase64String(testBadChecksumCrc32C)), Checksum.ChecksumType.Crc32C);
                _client.PutObject(putRequest);
            }
            // CURRENT SIMULATOR CREATES THIS OBJECT -- PROBABLY SHOULD NOT
            DeleteObject(TESTBUCKET, testObject.Name);
        }
コード例 #7
0
        public void TestPutWithSuppliedChecksum()
        {
            // "123456789" has a well known checksum
            string content = "123456789";
            string testChecksumCrc32C = "4waSgw==";

            Ds3Object testObject = new Ds3Object("numbers.txt", 9);
            var ds3Objs = new List<Ds3Object> {testObject};

            using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)))
            {
                // create or ensure bucket
                _helpers.EnsureBucketExists(TESTBUCKET);
                // create a job
                var job = _helpers.StartWriteJob(TESTBUCKET, ds3Objs);
                PutObjectRequest putRequest = new PutObjectRequest(TESTBUCKET, testObject.Name, job.JobId, 0L, stream);
                putRequest.WithChecksum(Checksum.Value(Convert.FromBase64String(testChecksumCrc32C)), Checksum.ChecksumType.Crc32C);
                _client.PutObject(putRequest);
            }
            //clean up
            DeleteObject(TESTBUCKET, testObject.Name);
        }
コード例 #8
0
        public void TestPutWithChecksum()
        {
            // grab a file
            var directoryObjects = FileHelpers.ListObjectsForDirectory(testDirectorySrc);
            Assert.IsNotEmpty(directoryObjects);
            Ds3Object testObject = directoryObjects.First<Ds3Object>();
            var ds3Objs = new List<Ds3Object>();
            ds3Objs.Add(testObject);

            // create or ensure bucket
            _helpers.EnsureBucketExists(TESTBUCKET);
            // create a job
            var job = _helpers.StartWriteJob(TESTBUCKET, ds3Objs);

            // instantiate a PutObjectRequest
            FileStream fs = File.Open(testDirectorySrc + Path.DirectorySeparatorChar + testObject.Name, FileMode.Open);
            PutObjectRequest putRequest = new PutObjectRequest(TESTBUCKET, testObject.Name, job.JobId, 0L, fs);
            putRequest.WithChecksum(Checksum.Compute, Checksum.ChecksumType.Crc32C);
            _client.PutObject(putRequest);
            fs.Close();

            //clean up
            DeleteObject(TESTBUCKET, testObject.Name);
        }
コード例 #9
0
        private void PutObject(IDs3Client client, BulkObject obj, MasterObjectList bulkResult)
        {
            var fileToPut = File.OpenRead(testDirectoryBigFolderForMaxBlob + obj.Name);
            var contentStream = new ObjectRequestStream(fileToPut, obj.Offset, obj.Length);
            var putObjectRequest = new PutObjectRequest(
                bulkResult.BucketName,
                obj.Name,
                contentStream
                ).WithJob(bulkResult.JobId)
                .WithOffset(obj.Offset);

            client.PutObject(putObjectRequest);
            fileToPut.Close();
        }
コード例 #10
0
        public void TestPutWithSuppliedChecksum()
        {
            const string bucketName = "TestPutWithSuppliedChecksum";
            //This test is supported only for BP 1.2
            if (!IsTestSupported(_client, 1.2))
            {
                Assert.Ignore();
            }

            try
            {
                // "123456789" has a well known checksum
                const string content = "123456789";
                const string testChecksumCrc32C = "4waSgw==";

                var testObject = new Ds3Object("numbers.txt", 9);
                var ds3Objs = new List<Ds3Object> {testObject};

                using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)))
                {
                    // create or ensure bucket
                    _helpers.EnsureBucketExists(bucketName);
                    // create a job
                    var job = _helpers.StartWriteJob(bucketName, ds3Objs);
                    var putRequest = new PutObjectRequest(bucketName, testObject.Name, stream)
                        .WithJob(job.JobId)
                        .WithOffset(0L);
                    putRequest.WithChecksum(ChecksumType.Value(Convert.FromBase64String(testChecksumCrc32C)),
                        ChecksumType.Type.CRC_32C);
                    _client.PutObject(putRequest);
                }
            }
            finally
            {
                Ds3TestUtils.DeleteBucket(_client, bucketName);
            }
        }
コード例 #11
0
        public void TestPutWithChecksum()
        {
            const string bucketName = "TestPutWithChecksum";

            //This test is supported only for BP 1.2
            if (!IsTestSupported(_client, 1.2))
            {
                Assert.Ignore();
            }

            try
            {
                // grab a file
                var directoryObjects = FileHelpers.ListObjectsForDirectory(testDirectorySrc);
                Assert.IsNotEmpty(directoryObjects);
                var testObject = directoryObjects.First();
                var ds3Objs = new List<Ds3Object> {testObject};

                // create or ensure bucket
                _helpers.EnsureBucketExists(bucketName);
                // create a job
                var job = _helpers.StartWriteJob(bucketName, ds3Objs);

                // instantiate a PutObjectRequest
                var fs = File.Open(testDirectorySrc + Path.DirectorySeparatorChar + testObject.Name,
                    FileMode.Open);
                var putRequest = new PutObjectRequest(bucketName, testObject.Name, fs)
                    .WithJob(job.JobId)
                    .WithOffset(0L);
                putRequest.WithChecksum(ChecksumType.Compute, ChecksumType.Type.CRC_32C);
                _client.PutObject(putRequest);
                fs.Close();
            }
            finally
            {
                Ds3TestUtils.DeleteBucket(_client, bucketName);
            }
        }
コード例 #12
0
        public void TestPutWithBadChecksum()
        {
            const string bucketName = "TestPutWithBadChecksum";
            try
            {
                // "123456789" has a well known checksum
                const string content = "123456789";
                const string testBadChecksumCrc32C = "4awSwg=="; // transposed two pairs

                var testObject = new Ds3Object("numbers_badcrc.txt", 9);
                var ds3Objs = new List<Ds3Object> {testObject};

                using (var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)))
                {
                    // create or ensure bucket
                    _helpers.EnsureBucketExists(bucketName);
                    // create a job
                    var job = _helpers.StartWriteJob(bucketName, ds3Objs);
                    var putRequest = new PutObjectRequest(bucketName, testObject.Name, stream)
                        .WithJob(job.JobId)
                        .WithOffset(0L);
                    putRequest.WithChecksum(ChecksumType.Value(Convert.FromBase64String(testBadChecksumCrc32C)),
                        ChecksumType.Type.CRC_32C);
                    Assert.Throws<Ds3BadStatusCodeException>(() => _client.PutObject(putRequest));
                }
            }
            finally
            {
                Ds3TestUtils.DeleteBucket(_client, bucketName);
            }
        }