文档中的示例代码仅供参考之用,具体使用的时候请参考KS3 API文档,根据自己的实际情况调节参数。
此SDK适用于Linux/Windows环境下C/C++版本。基于KS3 API 构建。
https://gitee.com/ks3sdk/ks3-c-sdk
1. 开通KS3服务,https://www.ksyun.com/user/register 注册账号
2. 进入控制台, https://ks3.console.ksyun.com/console.html#/setting 获取AccessKeyID 、AccessKeySecret
Object(对象,文件)
在KS3中,用户操作的基本数据单元是Object。单个Object允许存储0~48.8TB的数据。 Object 包含key和data。其中,key是Object的名字;data是Object 的数据。key为UTF-8编码,且编码后的长度不得超过1024个字符。
Key(文件名)
即Object的名字,key为UTF-8编码,且编码后的长度不得超过1024个字符。Key中可以带有斜杠,当Key中带有斜杠的时候,将会自动在控制台里组织成目录结构。
其他术语请参考概念与术语
请先阅读 常用概念术语文档
常见示例请参考源码中example.c文件
const char* host = "ks3-cn-beijing.ksyuncs.com";
const char* bucket = "YOUR_BUCKET";
const char* ak = "YOUR_ACCESS_KEY";
const char* sk = "YOUR_SECRET_KEY";
int error;
buffer* resp = NULL;
resp = create_bucket(host, bucket, ak, sk, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* host = "ks3-cn-beijing.ksyuncs.com";
const char* bucket = "YOUR_BUCKET";
const char* ak = "YOUR_ACCESS_KEY";
const char* sk = "YOUR_SECRET_KEY";
int error;
buffer* resp = NULL;
resp = delete_bucket(host, bucket, ak, sk, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* host = "ks3-cn-beijing.ksyuncs.com";
const char* ak = "YOUR_ACCESS_KEY";
const char* sk = "YOUR_SECRET_KEY";
int error;
buffer* resp = NULL;
resp = list_all_bucket(host, ak, sk, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* host = "ks3-cn-beijing.ksyuncs.com";
const char* bucket = "YOUR_BUCKET";
const char* object_key = "YOUR_OBJECT_KEY";
const char* filename = "LOCAL_DISK_FILE_PATH";
const char* ak = "YOUR_ACCESS_KEY";
const char* sk = "YOUR_SECRET_KEY";
const char* headers = "x-kss-acl:public-read";
int error;
buffer* resp = NULL;
resp = upload_file_object(host, bucket,
object_key, filename, ak, sk, NULL, headers, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* host = "ks3-cn-beijing.ksyuncs.com";
const char* bucket = "YOUR_BUCKET";
const char* object_key = "YOUR_OBJECT_KEY";
const char* ak = "YOUR_ACCESS_KEY";
const char* sk = "YOUR_SECRET_KEY";
const char* headers = "x-kss-acl:public-read";
int error;
buffer* resp = NULL;
resp = init_multipart_upload(host, bucket, object_key, ak, sk, NULL, headers, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code = %ld\n", resp->status_code);
printf("status msg = %s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg = %s\n", resp->body);
}
}
buffer_free(resp);
// 从response body中解析出uploadid:
char uploadid_str[128];
char *oid_beg_ptr = strstr(resp->body, "<UploadId>");
if (oid_beg_ptr) {
oid_beg_ptr += strlen("<UploadId>");
char *oid_end_ptr = strstr(oid_beg_ptr, "</UploadId>");
if (oid_end_ptr) {
strncpy(uploadid_str, oid_beg_ptr, oid_end_ptr - oid_beg_ptr);
uploadid_str[oid_end_ptr - oid_beg_ptr] = 0;
}
}
char* data_buf = "hello world";
int data_len = strlen(data_buf);
int partNumber = 1;
resp = upload_part(host, bucket, object_key, ak, sk,
uploadid_str, partNumber, data_buf, data_len, NULL, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code = %ld\n", resp->status_code);
printf("status msg = %s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg = %s\n", resp->body);
}
}
buffer_free(resp);
// 构造request body (如下是一块的例子,如果多块,则Part部分重复拼接多次)
snprintf(com_xml, sizeof(com_xml), "<CompleteMultipartUpload>\n"
"<Part>\n"
"<PartNumber>%d</PartNumber>\n"
"<ETag>\"%.*s\"</ETag>"
"</Part>\n</CompleteMultipartUpload>",
1, 32, etag_ptr);
resp = complete_multipart_upload(host, bucket, object_key, ak, sk,
uploadid_str, com_xml, strlen(com_xml), NULL, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code = %ld\n", resp->status_code);
printf("status msg = %s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg = %s\n", resp->body);
}
}
buffer_free(resp);
resp = list_multipart_uploads(host, bucket, ak, sk, uploadid_str, NULL, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code = %ld\n", resp->status_code);
printf("status msg = %s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg = %s\n", resp->body);
}
}
buffer_free(resp);
resp = abort_multipart_upload(host, bucket, object_key, ak, sk, uploadId, NULL, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code = %ld\n", resp->status_code);
printf("status msg = %s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg = %s\n", resp->body);
}
}
buffer_free(resp);
注意:header之间要以’\n’分隔
const char* headers = "x-kss-acl:public-read\nx-kss-callbackurl:http://www.callbackurl.com/";
resp = upload_file_object(host, bucket,
object_key, filename, ak, sk, NULL, headers, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* to_save_file_name = "./local_save";
resp = download_file_object(host, bucket,
object_key, to_save_file_name, ak, sk, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* object_key = "YOUR_OBJECT_KEY";
resp = delete_object(host, bucket, object_key, ak, sk, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* src_bucket = "SRC_BUCKET_NAME";
const char* src_object_key = "SRC_OBJECT_KEY";
const char* dst_bucket = "DST_BUCKET";
const char* dst_object_key = "DST_OBJECT_KEY";
resp = copy_object(host, src_bucket, src_object_key,
dst_bucket, dst_object_key, ak, sk, NULL, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
buffer_free(resp);
const char* buf = "hello world";
int buf_len = strlen(buf);
resp = upload_object(host, bucket,
object_key, buf, buf_len, ak, sk, NULL, NULL, &error);
if (error != 0) {
printf("curl err=%d\n", error);
} else {
printf("status code=%d\n", resp->status_code);
printf("status msg=%s\n", resp->status_msg);
if (resp->body != NULL) {
printf("error msg=%s\n", resp->body);
}
}
free(buf);
buffer_free(resp);
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!