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); }
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); } }
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); } } }