欢迎您来到腾讯云!积分商城

腾讯云腾讯云论坛

 找回密码
 立即注册
忘了密码?

扫一扫,访问微社区

快捷导航
搜索
查看: 480|回复: 0

[经验分享] COS兼容libs3使用说明

[复制链接]

8

主题

0

好友

380

积分

程序猿[LV2]

Rank: 2Rank: 2

云币
1000
威望
380
发表于 2017-11-30 19:53:17 |显示全部楼层 |未分类
1. SDK依赖
libs3依赖libcurl、libxml2、openssl库,环境需要安装依赖库


2. SDK安装
默认安装步骤如下:
1. 进入libs3 sdk目录
2. 执行make
3. 执行make install


3. libs3操作说明
3.1 创建bucket
bucketName需要设置为bucket-appid的形式,例如"s3test-1253666666"
hostName需要设置为cos域名,例如"cn-north.myqcloud.com"
accessKeyIdG需要设置为用户的secretId
secretAccessKeyG需要设置为用户的secretKey


示例:

  1.     S3_init();

  2.     S3ResponseHandler responseHandler =
  3.     {
  4.         &responsePropertiesCallback, &responseCompleteCallback
  5.     };

  6.     do {
  7.         S3_create_bucket(protocolG, accessKeyIdG, secretAccessKeyG, 0, hostName,
  8.                          bucketName, 0, cannedAcl, 0,
  9.                          0, 0, &responseHandler, 0);
  10.     } while (S3_status_is_retryable(statusG) && should_retry());

  11.     if (statusG == S3StatusOK) {
  12.         printf("Bucket successfully created.\n");
  13.     }
  14.     else {
  15.         printError();
  16.     }

  17.     S3_deinitialize();

复制代码
3.2 上传文件
bucketName 需要设置为 bucket-appid 的形式,例如 "s3test-1253666666";
hostName 需要设置为 cos 域名,例如 "cn-north.myqcloud.com";
accessKeyIdG 需要设置为用户的 secretId;
secretAccessKeyG 需要设置为用户的 secretKey;
uriStyleG 需要设置为 S3UriStyleVirtualHost,其枚举值为 0;


示例:

  1.     S3_init();

  2.     S3BucketContext bucketContext =
  3.     {
  4.         hostName,
  5.         bucketName,
  6.         protocolG,
  7.         uriStyleG,
  8.         accessKeyIdG,
  9.         secretAccessKeyG,
  10.         0,
  11.         0
  12.     };

  13.     S3PutProperties putProperties =
  14.     {
  15.         contentType,
  16.         md5,
  17.         cacheControl,
  18.         contentDispositionFilename,
  19.         contentEncoding,
  20.         expires,
  21.         cannedAcl,
  22.         metaPropertiesCount,
  23.         metaProperties,
  24.         u**rverSideEncryption
  25.     };

  26.     S3PutObjectHandler putObjectHandler =
  27.     {
  28.         { &responsePropertiesCallback, &responseCompleteCallback },
  29.         &putObjectDataCallback
  30.     };

  31.     do {
  32.         S3_put_object(&bucketContext, key, contentLength, &putProperties, 0,
  33.                       0, &putObjectHandler, &data);
  34.     } while (S3_status_is_retryable(statusG) && should_retry());

  35.     if (data.infile) {
  36.         fclose(data.infile);
  37.     }
  38.     else if (data.gb) {
  39.         growbuffer_destroy(data.gb);
  40.     }

  41.     if (statusG != S3StatusOK) {
  42.         printError();
  43.     }
  44.     else if (data.contentLength) {
  45.         fprintf(stderr, "\nERROR: Failed to read remaining %llu bytes from "
  46.                 "input\n", (unsigned long long) data.contentLength);
  47.     }

  48.     S3_deinitialize();
复制代码
3.3 下载文件
bucketName需要设置为bucket-appid的形式,例如"s3test-1253666666"
hostName需要设置为cos域名,例如"cn-north.myqcloud.com"
accessKeyIdG需要设置为用户的secretId
secretAccessKeyG需要设置为用户的secretKey
uriStyleG需要设置为S3UriStyleVirtualHost,其枚举值为0


示例:

  1.     S3_init();

  2.     S3BucketContext bucketContext =
  3.     {
  4.         hostName,
  5.         bucketName,
  6.         protocolG,
  7.         uriStyleG,
  8.         accessKeyIdG,
  9.         secretAccessKeyG,
  10.         0,
  11.         0
  12.     };

  13.     S3GetConditions getConditions =
  14.     {
  15.         ifModifiedSince,
  16.         ifNotModifiedSince,
  17.         ifMatch,
  18.         ifNotMatch
  19.     };

  20.     S3GetObjectHandler getObjectHandler =
  21.     {
  22.         { &responsePropertiesCallback, &responseCompleteCallback },
  23.         &getObjectDataCallback
  24.     };

  25.     do {
  26.         S3_get_object(&bucketContext, key, &getConditions, startByte,
  27.                       byteCount, 0, 0, &getObjectHandler, outfile);
  28.     } while (S3_status_is_retryable(statusG) && should_retry());

  29.     if (statusG != S3StatusOK) {
  30.         printError();
  31.     }

  32.     fclose(outfile);

  33.     S3_deinitialize();
复制代码
3.4 删除文件
bucketName 需要设置为 bucket-appid 的形式,例如 "s3test-1253666666";
hostName 需要设置为 cos 域名,例如 "cn-north.myqcloud.com";
accessKeyIdG 需要设置为用户的 secretId;
secretAccessKeyG 需要设置为用户的 secretKey;
uriStyleG 需要设置为 S3UriStyleVirtualHost,其枚举值为 0;


示例:

  1.     S3_init();

  2.     S3BucketContext bucketContext =
  3.     {
  4.         hostName,
  5.         bucketName,
  6.         protocolG,
  7.         uriStyleG,
  8.         accessKeyIdG,
  9.         secretAccessKeyG,
  10.         0,
  11.         0
  12.     };

  13.     S3ResponseHandler responseHandler =
  14.     {
  15.         0,
  16.         &responseCompleteCallback
  17.     };

  18.     do {
  19.         S3_delete_object(&bucketContext, key, 0, timeoutMsG, &responseHandler, 0);
  20.     } while (S3_status_is_retryable(statusG) && should_retry());

  21.     if ((statusG != S3StatusOK) &&
  22.         (statusG != S3StatusErrorPreconditionFailed)) {
  23.         printError();
  24.     }

  25.     S3_deinitialize();
复制代码
您需要登录后才可以回帖 登录 | 立即注册
您需要登录后才可以发帖 QQ登录

联系我们|腾讯云平台|积分商城|腾讯云官方论坛    

GMT+8, 2018-8-15 03:09 , Processed in 1.196159 second(s), 29 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部