def do_multipart_internal(self, do_md5): key = self.random_key() content = random_bytes(128 * 1024) parts = [] upload_id = self.bucket.init_multipart_upload(key).upload_id if do_md5: headers = {'Content-Md5': oss2.utils.content_md5(content)} else: headers = None result = self.bucket.upload_part(key, upload_id, 1, content, headers=headers) parts.append( oss2.models.PartInfo(1, result.etag, size=len(content), part_crc=result.crc)) self.assertTrue(result.crc is not None) complete_result = self.bucket.complete_multipart_upload( key, upload_id, parts) object_crc = calc_obj_crc_from_parts(parts) self.assertTrue(complete_result.crc is not None) self.assertEqual(object_crc, result.crc) result = self.bucket.get_object(key) self.assertEqual(content, result.read())
def test_multipart_with_versionging(self): from oss2.models import BucketVersioningConfig from oss2.models import BatchDeleteObjectVersion from oss2.models import BatchDeleteObjectVersionList from oss2.utils import calc_obj_crc_from_parts auth = oss2.Auth(OSS_ID, OSS_SECRET) bucket_name = OSS_BUCKET + "-test-multipart-with-versionging" bucket = oss2.Bucket(auth, self.endpoint, bucket_name) bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE) wait_meta_sync() config = BucketVersioningConfig() config.status = 'Enabled' result = bucket.put_bucket_versioning(config) wait_meta_sync() result = bucket.get_bucket_info() self.assertEqual(int(result.status)/100, 2) self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None) self.assertEqual(result.versioning_status, "Enabled") key = self.random_key() content = random_bytes(128 * 1024) parts = [] upload_id = bucket.init_multipart_upload(key).upload_id headers = {'Content-Md5': oss2.utils.content_md5(content)} result = bucket.upload_part(key, upload_id, 1, content, headers=headers) parts.append(oss2.models.PartInfo(1, result.etag, size=len(content), part_crc=result.crc)) self.assertTrue(result.crc is not None) complete_result = bucket.complete_multipart_upload(key, upload_id, parts) object_crc = calc_obj_crc_from_parts(parts) self.assertTrue(complete_result.crc is not None) self.assertEqual(object_crc, result.crc) self.assertTrue(complete_result.versionid is not None) bucket.delete_object(key, params={'versionId': complete_result.versionid}) try: bucket.delete_bucket() except: self.assertFalse(True, "should not get a exception")
def test_multipart_with_object_tagging(self): key = self.random_key() content = random_bytes(128 * 1024) tag_str = '' tag_key1 = urlquote('+:/') tag_value1 = urlquote('.-') tag_str = tag_key1 + '=' + tag_value1 tag_ke2 = urlquote(' + ') tag_value2 = urlquote(u'中文'.encode('UTF-8')) tag_str += '&' + tag_ke2 + '=' + tag_value2 headers = dict() headers[OSS_OBJECT_TAGGING] = tag_str parts = [] upload_id = self.bucket.init_multipart_upload( key, headers=headers).upload_id headers = {'Content-Md5': oss2.utils.content_md5(content)} result = self.bucket.upload_part(key, upload_id, 1, content, headers=headers) parts.append( oss2.models.PartInfo(1, result.etag, size=len(content), part_crc=result.crc)) self.assertTrue(result.crc is not None) complete_result = self.bucket.complete_multipart_upload( key, upload_id, parts) object_crc = calc_obj_crc_from_parts(parts) self.assertTrue(complete_result.crc is not None) self.assertEqual(object_crc, result.crc) result = self.bucket.get_object(key) self.assertEqual(content, result.read()) result = self.bucket.get_object_tagging(key) self.assertEqual(2, result.tag_set.len()) self.assertEqual('.-', result.tag_set.tagging_rule['+:/']) self.assertEqual('中文', result.tag_set.tagging_rule[' + ']) result = self.bucket.delete_object_tagging(key)