示例#1
0
        public void AppendFile(string fileName, Stream stream)
        {
            fileName = GetFileName(fileName);
            //第一次追加文件的时候,文件可能已经存在,先获取文件的当前长度,如果不存在,position为0
            long position = 0;

            if (ExistFile(fileName))
            {
                var metadata = ossClient.GetObjectMetadata(Config.BucketName, fileName);

                if (metadata.ObjectType == "Appendable")
                {
                    position = metadata.ContentLength;
                }
                else
                {
                    throw new HimallIOException(IOErrorMsg.NoramlFileNotOperate.ToDescription());
                }
            }
            else
            {
                RecurseCreateFileDir(fileName);
            }

            var request = new AppendObjectRequest(Config.BucketName, fileName)
            {
                ObjectMetadata = new ObjectMetadata(),
                Content        = stream,
                Position       = position
            };

            ossClient.AppendObject(request);
        }
示例#2
0
        public void AppendObjectTest()
        {
            var key = OssTestUtils.GetObjectKey(_className);

            long position = 0;
            var  request  = new AppendObjectRequest(_bucketName, key)
            {
                Content  = new MemoryStream(Encoding.ASCII.GetBytes(_data_200KB)),
                Position = position
            };

            Assert.AreEqual(request.TrafficLimit, 0);

            var result = _ossClient.AppendObject(request);

            Assert.AreEqual(_data_200KB.Length, result.NextAppendPosition);
            position = result.NextAppendPosition;
            Assert.AreEqual(result.ResponseMetadata.ContainsKey(HttpHeaders.QosDelayTime), false);


            request = new AppendObjectRequest(_bucketName, key)
            {
                Content      = new MemoryStream(Encoding.ASCII.GetBytes(_data_200KB)),
                Position     = position,
                TrafficLimit = 100 * 1024 * 8
            };
            Assert.AreEqual(request.TrafficLimit, 819200);
            result = _ossClient.AppendObject(request);
            Assert.IsTrue(result.HashCrc64Ecma != 0);
            Assert.AreEqual(result.ResponseMetadata.ContainsKey(HttpHeaders.QosDelayTime), true);
        }
        public void AppendObjectProgressTest()
        {
            var key = OssTestUtils.GetObjectKey(_className);

            try
            {
                long position = 0;
                using (var fs = File.Open(Config.UploadTestFile, FileMode.Open))
                {
                    // the first time append
                    var fileLength = fs.Length / 2;
                    var request    = new AppendObjectRequest(_bucketName, key)
                    {
                        ObjectMetadata = new ObjectMetadata(),
                        Content        = new PartialWrapperStream(fs, fileLength),
                        Position       = position,
                    };
                    request.StreamTransferProgress += uploadProgressCallback;

                    var result = _ossClient.AppendObject(request);
                    Assert.AreEqual(fileLength, result.NextAppendPosition);
                    position = result.NextAppendPosition;

                    // the second time append
                    fs.Position = fs.Length / 2;
                    fileLength  = fs.Length - fs.Length / 2;
                    request     = new AppendObjectRequest(_bucketName, key)
                    {
                        ObjectMetadata = new ObjectMetadata(),
                        Content        = new PartialWrapperStream(fs, fileLength),
                        Position       = position
                    };
                    request.StreamTransferProgress += uploadProgressCallback;

                    result = _ossClient.AppendObject(request);
                    Assert.AreEqual(fs.Length, result.NextAppendPosition);
                    Assert.IsTrue(result.HashCrc64Ecma != 0);
                }

                // check md5
                OssTestUtils.DownloadObject(_ossClient, _bucketName, key, _tmpLocalFile);
                var expectedHashDigest = FileUtils.ComputeContentMd5(Config.UploadTestFile);
                var actualHashDigest   = FileUtils.ComputeContentMd5(_tmpLocalFile);
                Assert.AreEqual(expectedHashDigest, actualHashDigest);
            }
            finally
            {
                if (OssTestUtils.ObjectExists(_ossClient, _bucketName, key))
                {
                    _ossClient.DeleteObject(_bucketName, key);
                }
                File.Delete(_tmpLocalFile);
            }
        }
示例#4
0
        public void TestDisableCrc()
        {
            Common.ClientConfiguration config = new Common.ClientConfiguration();
            config.EnableCrcCheck = false;
            IOss ossClient  = OssClientFactory.CreateOssClient(config);
            var  targetFile = OssTestUtils.GetTargetFileName(_className);

            targetFile = Path.Combine(Config.DownloadFolder, targetFile);
            var objectKeyName = "test-object-disable-crc";

            try
            {
                // put & get
                PutObjectResult putObjectResult = ossClient.PutObject(_bucketName, objectKeyName, Config.UploadTestFile);
                var             actualCrc       = putObjectResult.ResponseMetadata[HttpHeaders.HashCrc64Ecma];

                OssObject ossObject   = ossClient.GetObject(_bucketName, objectKeyName);
                var       expectedCrc = OssUtils.ComputeContentCrc64(ossObject.Content, ossObject.ContentLength);

                Assert.AreEqual(expectedCrc, actualCrc);
                ossClient.DeleteObject(_bucketName, objectKeyName);

                // put & get by uri
                var testStr    = FileUtils.GenerateOneKb();
                var content    = Encoding.ASCII.GetBytes(testStr);
                var now        = DateTime.Now;
                var expireDate = now.AddSeconds(120);
                var uri        = _ossClient.GeneratePresignedUri(_bucketName, objectKeyName, expireDate, SignHttpMethod.Put);
                var putResult  = ossClient.PutObject(uri, new MemoryStream(content));

                expectedCrc = putResult.ResponseMetadata[HttpHeaders.HashCrc64Ecma];
                actualCrc   = OssUtils.ComputeContentCrc64(new MemoryStream(content), content.Length);
                Assert.AreEqual(expectedCrc, actualCrc);

                uri         = _ossClient.GeneratePresignedUri(_bucketName, objectKeyName, expireDate, SignHttpMethod.Get);
                ossObject   = ossClient.GetObject(uri);
                expectedCrc = OssUtils.ComputeContentCrc64(ossObject.Content, ossObject.ContentLength);

                Assert.AreEqual(expectedCrc, actualCrc);
                ossClient.DeleteObject(_bucketName, objectKeyName);

                // upload & download
                var uploadObjectResult = ossClient.ResumableUploadObject(_bucketName, objectKeyName, Config.MultiUploadTestFile, null,
                                                                         Config.DownloadFolder);
                actualCrc = uploadObjectResult.ResponseMetadata[HttpHeaders.HashCrc64Ecma];

                DownloadObjectRequest downloadObjectRequest = new DownloadObjectRequest(_bucketName, objectKeyName, targetFile);
                var metadata = ossClient.ResumableDownloadObject(downloadObjectRequest);

                Assert.AreEqual(metadata.Crc64, actualCrc);
                ossClient.DeleteObject(_bucketName, objectKeyName);

                // append
                using (var fs = File.Open(Config.UploadTestFile, FileMode.Open))
                {
                    var fileLength          = fs.Length;
                    var appendObjectRequest = new AppendObjectRequest(_bucketName, objectKeyName)
                    {
                        Content = fs,
                    };
                    var appendObjectResult = _ossClient.AppendObject(appendObjectRequest);
                    fs.Seek(0, SeekOrigin.Begin);
                    actualCrc = OssUtils.ComputeContentCrc64(fs, fs.Length);
                    Assert.AreEqual(appendObjectResult.HashCrc64Ecma.ToString(), actualCrc);
                    ossClient.DeleteObject(_bucketName, objectKeyName);
                }
            }
            finally
            {
                try
                {
                    FileUtils.DeleteFile(targetFile);
                }
                catch (Exception e)
                {
                    LogUtility.LogWarning("Delete file {0} failed with Exception {1}", targetFile, e.Message);
                }
            }
        }
        public void AppendObjectTest()
        {
            var key = OssTestUtils.GetObjectKey(_className);

            var request = new AppendObjectRequest(_bucketName, key);

            Assert.AreEqual(request.RequestPayer, RequestPayer.BucketOwner);

            try
            {
                request = new AppendObjectRequest(_bucketName, key)
                {
                    Content  = new MemoryStream(Encoding.ASCII.GetBytes("hello world")),
                    Position = 0
                };
                var result = _ossPayerClient.AppendObject(request);
                Assert.Fail("should not here.");
            }
            catch (OssException e)
            {
                Assert.AreEqual(e.ErrorCode, "AccessDenied");
            }

            try
            {
                long position = 0;
                using (var fs = File.Open(Config.UploadTestFile, FileMode.Open))
                {
                    var fileLength = fs.Length;
                    request = new AppendObjectRequest(_bucketName, key)
                    {
                        Content      = fs,
                        Position     = position,
                        RequestPayer = RequestPayer.Requester
                    };

                    var result = _ossPayerClient.AppendObject(request);
                    Assert.AreEqual(fileLength, result.NextAppendPosition);
                    position = result.NextAppendPosition;
                }

                using (var fs = File.Open(Config.UploadTestFile, FileMode.Open))
                {
                    var fileLength = fs.Length;
                    request = new AppendObjectRequest(_bucketName, key)
                    {
                        Content      = fs,
                        Position     = position,
                        RequestPayer = RequestPayer.Requester
                    };

                    var result = _ossPayerClient.AppendObject(request);
                    Assert.AreEqual(fileLength * 2, result.NextAppendPosition);
                    Assert.IsTrue(result.HashCrc64Ecma != 0);
                }

                var meta = _ossClient.GetObjectMetadata(_bucketName, key);
                Assert.AreEqual("Appendable", meta.ObjectType);
            }
            finally
            {
                if (OssTestUtils.ObjectExists(_ossClient, _bucketName, key))
                {
                    _ossClient.DeleteObject(_bucketName, key);
                }
            }
        }