




<AccessControlPolicy><Owner><ID>qcs::cam::uin/100000000001:uin/100000000001</ID></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="RootAccount"><ID>qcs::cam::uin/100000000001:uin/100000000001</ID></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>












package mainimport ("context""fmt""os""net/url""net/http""github.com/tencentyun/cos-go-sdk-v5""github.com/tencentyun/cos-go-sdk-v5/debug")func log_status(err error) {if err == nil {return}if cos.IsNotFoundError(err) {// WARNfmt.Println("WARN: Resource is not existed: %v", err)} else if e, ok := cos.IsCOSError(err); ok {fmt.Printf("ERROR: Code: %v\\n", e.Code)fmt.Printf("ERROR: Message: %v\\n", e.Message)fmt.Printf("ERROR: Resource: %v\\n", e.Resource)fmt.Printf("ERROR: RequestId: %v\\n", e.RequestID)// ERROR} else {fmt.Printf("ERROR: %v\\n", err)// ERROR}}var (srcBucket = "test-1259654469"srcBucketRegion = "ap-guangzhou"srcCosClient *cos.ClientcopyObjs = map[string]struct{}{})func newClient(bucket, region string) *cos.Client {u, _ := url.Parse(fmt.Sprintf("https://%v.cos.%v.myqcloud.com", bucket, region))b := &cos.BaseURL{BucketURL: u,}return cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("COS_SECRETID"),SecretKey: os.Getenv("COS_SECRETKEY"),Transport: &debug.DebugRequestTransport{RequestHeader: false,RequestBody: false,ResponseHeader: false,ResponseBody: false,},},})}func recoverObj(key, versionId string) {sourceURL := fmt.Sprintf("%v.cos.%v.myqcloud.com/%v?versionId=%v", srcBucket, srcBucketRegion, key, versionId)_, _, err := srcCosClient.Object.MultiCopy(context.Background(), key, sourceURL, nil)if err != nil {log_status(err)}}func main() {srcCosClient = newClient(srcBucket, srcBucketRegion)keyMarker := ""versionIdMarker := ""isTruncated := trueopt := &cos.BucketGetObjectVersionsOptions{EncodingType: "url",}for isTruncated {opt.KeyMarker = keyMarkeropt.VersionIdMarker = versionIdMarkerv, _, err := srcCosClient.Bucket.GetObjectVersions(context.Background(), opt)if err != nil {log_status(err)break}for _, vc := range v.DeleteMarker {if vc.IsLatest {// The object has been deleted and needs to be restored.copyObjs[vc.Key] = struct{}{}}}for _, vc := range v.Version {// Restore to the latest versionif _, ok := copyObjs[vc.Key]; ok {delete(copyObjs, vc.Key)key, _ := cos.DecodeURIComponent(vc.Key)fmt.Printf("key: %v, versionId: %v\\n", key, vc.VersionId)recoverObj(key, vc.VersionId)}}keyMarker = v.NextKeyMarkerversionIdMarker = v.NextVersionIdMarkerisTruncated = v.IsTruncated}}
package mainimport ("context""fmt""os""net/url""net/http""github.com/tencentyun/cos-go-sdk-v5""github.com/tencentyun/cos-go-sdk-v5/debug")func log_status(err error) {if err == nil {return}if cos.IsNotFoundError(err) {// WARNfmt.Println("WARN: Resource is not existed: %v", err)} else if e, ok := cos.IsCOSError(err); ok {fmt.Printf("ERROR: Code: %v\\n", e.Code)fmt.Printf("ERROR: Message: %v\\n", e.Message)fmt.Printf("ERROR: Resource: %v\\n", e.Resource)fmt.Printf("ERROR: RequestId: %v\\n", e.RequestID)// ERROR} else {fmt.Printf("ERROR: %v\\n", err)// ERROR}}var (srcBucket = "test-1259654469"dstBucket = "test2-1259654469"srcBucketRegion = "ap-guangzhou"dstBucketRegion = "ap-guangzhou"srcCosClient *cos.ClientdstCosClient *cos.Client)func newClient(bucket, region string) *cos.Client {u, _ := url.Parse(fmt.Sprintf("https://%v.cos.%v.myqcloud.com", bucket, region))b := &cos.BaseURL{BucketURL: u,}return cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("COS_SECRETID"),SecretKey: os.Getenv("COS_SECRETKEY"),Transport: &debug.DebugRequestTransport{RequestHeader: false,RequestBody: false,ResponseHeader: false,ResponseBody: false,},},})}func recoverObj(key, versionId string) {sourceURL := fmt.Sprintf("%v.cos.%v.myqcloud.com/%v?versionId=%v", srcBucket, srcBucketRegion, key, versionId)_, _, err := dstCosClient.Object.MultiCopy(context.Background(), key, sourceURL, nil)if err != nil {log_status(err)}}func main() {srcCosClient = newClient(srcBucket, srcBucketRegion)dstCosClient = newClient(dstBucket, dstBucketRegion)keyMarker := ""versionIdMarker := ""isTruncated := trueopt := &cos.BucketGetObjectVersionsOptions{EncodingType: "url",}var preKey stringfor isTruncated {opt.KeyMarker = keyMarkeropt.VersionIdMarker = versionIdMarkerv, _, err := srcCosClient.Bucket.GetObjectVersions(context.Background(), opt)if err != nil {log_status(err)break}for _, vc := range v.Version {// Latest non-deletemarker objectif preKey != vc.Key {preKey = vc.Keykey, _ := cos.DecodeURIComponent(vc.Key)fmt.Printf("key: %v, versionId: %v, lastest: %v\\n", key, vc.VersionId, vc.IsLatest)recoverObj(key, vc.VersionId)}}keyMarker = v.NextKeyMarkerversionIdMarker = v.NextVersionIdMarkerisTruncated = v.IsTruncated}}
import com.qcloud.cos.COSClient;import com.qcloud.cos.ClientConfig;import com.qcloud.cos.auth.BasicCOSCredentials;import com.qcloud.cos.auth.COSCredentials;import com.qcloud.cos.exception.CosClientException;import com.qcloud.cos.exception.CosServiceException;import com.qcloud.cos.http.HttpProtocol;import com.qcloud.cos.model.COSVersionSummary;import com.qcloud.cos.model.CopyObjectRequest;import com.qcloud.cos.model.CopyObjectResult;import com.qcloud.cos.model.ListVersionsRequest;import com.qcloud.cos.model.VersionListing;import com.qcloud.cos.region.Region;import java.util.List;import java.util.Objects;public class RecoverObjectsDemo {private static String secretId = "************************************";private static String secretKey = "************************************";private static String bucketName = "examplebucket-12500000000";private static String bucketRegion = "ap-guangzhou";private static COSClient cosClient = createCli();public static void main(String[] args) {listAndRecoverObjs();}private static COSClient createCli() {// 1 Initializing user identity information (secretId, secretKey)COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 2 Setting the region of the bucket. For the abbreviations of COS regions, refer to https://www.qcloud.com/document/product/436/6224ClientConfig clientConfig = new ClientConfig(new Region(bucketRegion));clientConfig.setHttpProtocol(HttpProtocol.https);// Generate the cos clientreturn new COSClient(cred, clientConfig);}private static void listAndRecoverObjs() {ListVersionsRequest listVersionsRequest = new ListVersionsRequest();listVersionsRequest.setBucketName(bucketName);listVersionsRequest.setPrefix("");listVersionsRequest.setMaxResults(1000);VersionListing versionListing = null;String recover_key = "";String recover_versionid = "";boolean has_recovered = false;do {try {versionListing = cosClient.listVersions(listVersionsRequest);} catch (CosServiceException e) {e.printStackTrace();return;} catch (CosClientException e) {e.printStackTrace();return;}List<COSVersionSummary> cosVersionSummaries = versionListing.getVersionSummaries();for (COSVersionSummary cosVersionSummary : cosVersionSummaries) {String key = cosVersionSummary.getKey();String versionId = cosVersionSummary.getVersionId();boolean isDeleteMarker = cosVersionSummary.isDeleteMarker();boolean isLatest = cosVersionSummary.isLatest();String msg = String.format("list obj, Key[%s], Version[%s], isDeleteMarker[%s], isLatest[%s]", key, versionId, isDeleteMarker, isLatest);System.out.println(msg);if (isDeleteMarker && isLatest) {// Only restore the object with the latest versionid as the delete markerrecover_key = key;has_recovered = false;} else if (!isDeleteMarker && !isLatest && Objects.equals(key, recover_key) && !has_recovered) {// Neither the latest version nor the delete marker. If the key equals recover_key, it means the data version to be restored is found, then execute the restore logicrecover_versionid = versionId;recoverObj(recover_key, recover_versionid);has_recovered = true;}}String keyMarker = versionListing.getNextKeyMarker();String versionIdMarker = versionListing.getNextVersionIdMarker();listVersionsRequest.setKeyMarker(keyMarker);listVersionsRequest.setVersionIdMarker(versionIdMarker);} while (versionListing.isTruncated());}private static void recoverObj(String srcKey, String srcVersionId) {String dstKey = srcKey;CopyObjectRequest copyObjectRequest = new CopyObjectRequest(new Region(bucketRegion), bucketName, srcKey, bucketName, dstKey);copyObjectRequest.setSourceVersionId(srcVersionId);try {CopyObjectResult result = cosClient.copyObject(copyObjectRequest);String msg = String.format("finish recover by copying obj, srcKey[%s], srcVersion[%s], dstKey[%s], dstVersion[%s]", srcKey, srcVersionId, dstKey, result.getVersionId());System.out.println(msg);} catch (CosServiceException cse) {cse.printStackTrace();} catch (CosClientException cce) {cce.printStackTrace();}}}
import com.qcloud.cos.COSClient;import com.qcloud.cos.ClientConfig;import com.qcloud.cos.auth.BasicCOSCredentials;import com.qcloud.cos.auth.COSCredentials;import com.qcloud.cos.exception.CosClientException;import com.qcloud.cos.exception.CosServiceException;import com.qcloud.cos.http.HttpProtocol;import com.qcloud.cos.model.CopyObjectRequest;import com.qcloud.cos.model.CopyObjectResult;import com.qcloud.cos.model.COSVersionSummary;import com.qcloud.cos.model.ListVersionsRequest;import com.qcloud.cos.model.VersionListing;import com.qcloud.cos.region.Region;import java.util.ArrayList;import java.util.List;public class RecoverObjectsDemo2 {private static String secretId = "************************************";private static String secretKey = "************************************";private static String srcbucketName = "examplebucket-backup-12500000000";private static String dstbucketName = "examplebucket-dest-12500000000";private static String srcbucketRegion = "ap-guangzhou";private static String dstbucketRegion = "ap-shanghai";private static List<String> copyobjs = new ArrayList<>();private static COSClient srcCosClient = createCli(srcbucketRegion);private static COSClient dstCosClient = createCli(dstbucketRegion);public static void main(String[] args) {listAndRecoverObjs();}private static COSClient createCli(String region) {// 1 Initializing user identity information (secretId, secretKey)COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 2 Setting the region of the bucket. For the abbreviations of COS regions, refer to https://www.qcloud.com/document/product/436/6224ClientConfig clientConfig = new ClientConfig(new Region(region));clientConfig.setHttpProtocol(HttpProtocol.https);// Generate the cos clientreturn new COSClient(cred, clientConfig);}private static void recoverObj(String srcKey, String srcVersionId) {String dstKey = srcKey;CopyObjectRequest copyObjectRequest = new CopyObjectRequest(new Region(srcbucketRegion), srcbucketName, srcKey, dstbucketName, dstKey);copyObjectRequest.setSourceVersionId(srcVersionId);try {CopyObjectResult result = dstCosClient.copyObject(copyObjectRequest);String msg = String.format("finish recover by copying obj, srcBucket[%s], srcKey[%s], srcVersion[%s], dstBucket[%s], dstKey[%s], dstVersion[%s]",srcbucketName, srcKey, srcVersionId, dstbucketName, dstKey, result.getVersionId());System.out.println(msg);copyobjs.add(srcKey);} catch (CosServiceException cse) {cse.printStackTrace();} catch (CosClientException cce) {cce.printStackTrace();}}private static void listAndRecoverObjs() {ListVersionsRequest listVersionsRequest = new ListVersionsRequest();listVersionsRequest.setBucketName(srcbucketName);listVersionsRequest.setPrefix("");VersionListing versionListing = null;do {try {versionListing = srcCosClient.listVersions(listVersionsRequest);} catch (CosServiceException e) {e.printStackTrace();return;} catch (CosClientException e) {e.printStackTrace();return;}List<COSVersionSummary> cosVersionSummaries = versionListing.getVersionSummaries();for (COSVersionSummary cosVersionSummary : cosVersionSummaries) {String key = cosVersionSummary.getKey();String versionId = cosVersionSummary.getVersionId();boolean isDeleteMarker = cosVersionSummary.isDeleteMarker();boolean isLatest = cosVersionSummary.isLatest();if (!isDeleteMarker) {if (isLatest) {System.out.println("latest object, will copy " + "key:" + key + ", versionId:" + versionId);recoverObj(key, versionId);} else {if (!copyobjs.contains(key)) {System.out.println("not latest object, will copy " + "key:" + key + ", versionId:" + versionId);recoverObj(key, versionId);}}}}String keyMarker = versionListing.getNextKeyMarker();String versionIdMarker = versionListing.getNextVersionIdMarker();listVersionsRequest.setKeyMarker(keyMarker);listVersionsRequest.setVersionIdMarker(versionIdMarker);} while (versionListing.isTruncated());System.out.println("--------------------------------------");}}
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport osimport logging# logging.basicConfig(level=logging.INFO, stream=sys.stdout)def _recover_main(src_region, src_bucket, secret_id, secret_key, prefix):src_client = CosS3Client(CosConfig(Region=src_region, SecretId=secret_id, SecretKey=secret_key))# Pagination parameters for listing operationskey_marker = ''versionId_marker = ''recovered_keys = set() # Used to record recovered objectswhile True:response = src_client.list_objects_versions(Bucket=src_bucket,Prefix=prefix,KeyMarker=key_marker,VersionIdMarker=versionId_marker,)delete_marker_keys = set()# Retrieve the deleted object from the DeleteMarkerif 'DeleteMarker' in response:for version in response['DeleteMarker']:if version['IsLatest'] == 'true':delete_marker_keys.add(version['Key'])if len(delete_marker_keys) == 0:print('no delete markers found, no data to recover, continue listing')# Retrieve the object version for recovery from Versionif 'Version' in response:for version in response['Version']:key = version['Key']versionId = version['VersionId']if key in delete_marker_keys and not key in recovered_keys:print('recover from object: {src_bucket}/{key}(versionId:{versionId})'.format(src_bucket=src_bucket, key=key, versionId=versionId))try:src_client.copy(Bucket=src_bucket,Key=key,CopySource={'Bucket': src_bucket,'Key': key,'Region': src_region,'VersionId': versionId,})recovered_keys.add(key)print("success recover object: {src_bucket}/{key}(versionId={versionId}) => {src_bucket}/{key}".format(src_bucket=src_bucket, key=key, versionId=versionId))except Exception as e:print(e)passif response['IsTruncated'] == 'false':breakkey_marker = response['NextKeyMarker']versionId_marker = response['NextVersionIdMarker']if __name__ == '__main__':# Use Cases:# Restore files from historical versions based on the delete marker in the source bucket src_bucket# Source Bucket Informationsrc_region = 'ap-guangzhou' # Source regionsrc_bucket = 'bucket-1250000000' # Source bucket name# Obtain the secret key from environment variablessecret_id = os.environ['COS_SECRET_ID']secret_key = os.environ['COS_SECRET_KEY']prefix = '' # Set the object prefix to restore, e.g., 'docs/'. Default empty string means restore all objects._recover_main(src_region=src_region,src_bucket=src_bucket,secret_id=secret_id,secret_key=secret_key,prefix=prefix)
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport osimport logging# logging.basicConfig(level=logging.INFO, stream=sys.stdout)def _recover_main(src_region, src_bucket, dst_region, dst_bucket, secret_id, secret_key, prefix):src_client = CosS3Client(CosConfig(Region=src_region, SecretId=secret_id, SecretKey=secret_key))dst_client = CosS3Client(CosConfig(Region=dst_region, SecretId=secret_id, SecretKey=secret_key))# Pagination parameters for listing operationskey_marker = ''versionId_marker = ''recovered_keys = set() # Record recovered objectswhile True:response = src_client.list_objects_versions(Bucket=src_bucket,Prefix=prefix,KeyMarker=key_marker,VersionIdMarker=versionId_marker,)# Retrieve the object version for recovery from Versionif 'Version' in response:for version in response['Version']:key = version['Key']versionId = version['VersionId']if not key in recovered_keys:print('recover from object: {src_bucket}/{key}(versionId={versionId})'.format(src_bucket=src_bucket, key=key, versionId=versionId))try:dst_client.copy(Bucket=dst_bucket,Key=key,CopySource={'Bucket': src_bucket,'Key': key,'Region': src_region,'VersionId': versionId,})recovered_keys.add(key)print("success recover object: {src_bucket}/{key}(versionId={versionId}) => {dst_bucket}/{key}".format(src_bucket=src_bucket, key=key, versionId=versionId, dst_bucket=dst_bucket))except Exception as e:print(e)passif response['IsTruncated'] == 'false':breakkey_marker = response['NextKeyMarker']versionId_marker = response['NextVersionIdMarker']if __name__ == '__main__':# Use Cases:# src_bucket: Backup bucket# dst_bucket: Destination bucket# When objects in the destination bucket (dst_bucket) are accidentally deleted, traverse the objects in the backup bucket (src_bucket), select the current version objects without delete markers, and copy them to the destination bucket (dst_bucket) to complete the recovery.# Backup Bucket Informationsrc_region = 'ap-guangzhou'src_bucket = 'bucket-backup-1250000000'# Destination Bucket Informationdst_region = 'ap-guangzhou'dst_bucket = 'bucket-1250000000'# Obtain the secret key from environment variablessecret_id = os.environ['COS_SECRET_ID']secret_key = os.environ['COS_SECRET_KEY']prefix = '' # Set the object prefix to restore, e.g., 'docs/'. Default empty string means restore all objects._recover_main(src_region=src_region,src_bucket=src_bucket,dst_region=dst_region,dst_bucket=dst_bucket,secret_id=secret_id,secret_key=secret_key,prefix=prefix)
DELETE /exampleobject?versionId=MTg0NDUxNzgyODk2ODc1NjY0NzQ HTTP/1.1Host: examplebucket-1250000000.cos.ap-beijing.myqcloud.comDate: Wed, 14 Aug 2019 12:00:42 GMTAuthorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1565784042;1565791242&q-key-time=1565784042;1565791242&q-header-list=date;host&q-url-param-list=versionid&q-signature=****************************************Connection: close
HTTP/1.1 204 No Content Content-Length: 0 Connection: close Date: Wed, 14 Aug 2019 12:00:42 GMT Server: tencent-cos x-cos-delete-marker: true x-cos-request-id: NWQ1M2Y3ZWFfNzljMDBiMDlfMjkyMDJfMWRjNjVm**** x-cos-version-id: MTg0NDUxNzgyODk2ODc1NjY0NzQ
response = client.delete_object( Bucket='examplebucket-1250000000', Key='exampleobject', VersionId='string' )

PUT /exampleobject HTTP/1.1Host: destinationbucket-1250000000.cos.ap-beijing.myqcloud.comDate: Sat, 11 Apr 2020 17:51:35 GMTx-cos-copy-source: sourcebucket-1250000001.cos.ap-shanghai.myqcloud.com/example.jpg?versionId=MTg0NDUxNTc0NDYyMjQ2MzUzMjQContent-Length: 0Authorization: q-sign-algorithm=sha1&q-ak=************************************&q-sign-time=1586627495;1586634695&q-key-time=1586627495;1586634695&q-header-list=content-length;date;host;x-cos-copy-source&q-url-param-list=&q-signature=****************************************Connection: close
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: 219 Connection: close Date: Sat, 11 Apr 2020 17:51:35 GMT Server: tencent-cos x-cos-copy-source-version-id: MTg0NDUxNTc0NDYyMjQ2MzUzMjQ x-cos-request-id: NWU5MjAzYTdfMWZjMDJhMDlfNTE4N18zNGU2**** <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"ee8de918d05640145b18f70f4c3aa602"</ETag> <CRC64>16749565679157681890</CRC64> <LastModified>2020-04-11T17:51:35Z</LastModified> </CopyObjectResult>
response = client.copy( Bucket='examplebucket-1250000000', Key='exampleobject', CopySource={ 'Bucket': 'examplebucket-1250000000', 'Key': 'exampleobject', 'Region': 'ap-guangzhou', 'VersionId': 'String' } )

Apakah halaman ini membantu?
Anda juga dapat Menghubungi Penjualan atau Mengirimkan Tiket untuk meminta bantuan.
masukan