static Qiniu_Error Qiniu_Client_callWithBody( Qiniu_Client* self, Qiniu_Json** ret, const char* url, const char* body, Qiniu_Int64 bodyLen, const char* mimeType) { int retCode = 0; Qiniu_Error err; const char* ctxType; char ctxLength[64]; Qiniu_Header* headers = NULL; CURL* curl = (CURL*)self->curl; // Bind the NIC for sending packets. if (self->boundNic != NULL) { retCode = curl_easy_setopt(curl, CURLOPT_INTERFACE, self->boundNic); if (retCode == CURLE_INTERFACE_FAILED) { err.code = 9994; err.message = "Can not bind the given NIC"; return err; } } curl_easy_setopt(curl, CURLOPT_POST, 1); if (mimeType == NULL) { ctxType = "Content-Type: application/octet-stream"; } else { ctxType = Qiniu_String_Concat2("Content-Type: ", mimeType); } Qiniu_snprintf(ctxLength, 64, "Content-Length: %lld", bodyLen); headers = curl_slist_append(NULL, ctxLength); headers = curl_slist_append(headers, ctxType); if (self->auth.itbl != NULL) { if (body == NULL) { err = self->auth.itbl->Auth(self->auth.self, &headers, url, NULL, 0); } else { err = self->auth.itbl->Auth(self->auth.self, &headers, url, body, (size_t)bodyLen); } if (err.code != 200) { return err; } } curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); err = Qiniu_callex(curl, &self->b, &self->root, Qiniu_False, &self->respHeader); curl_slist_free_all(headers); if (mimeType != NULL) { free((void*)ctxType); } *ret = self->root; return err; }
int main(int argc, char * argv[]) { Qiniu_Client client; Qiniu_Mac mac; char * bucketName = "test"; char * file_path = "./local.txt"; mac.accessKey = "Hw_2_emX0FV5fe26brBCemk3Yhdzd5l86UwfI9_n"; mac.secretKey = "V09N6hmt3Z4vieC7Ps3g6HAyQ136cGSmAj7UtjWv"; Qiniu_Servend_Init(-1); Qiniu_Client_InitNoAuth(&client, 1024); #if 0 //upload Qiniu_RS_PutPolicy putPolicy; Qiniu_Zero(putPolicy); putPolicy.scope = "test"; char * uploadtoken = Qiniu_RS_PutPolicy_Token(&putPolicy, &mac); Qiniu_Io_PutRet putRet; Qiniu_Error error = Qiniu_Io_PutFile(&client, &putRet, uploadtoken, "local.txt", "./local.txt", NULL); if (error.code != 200) { printf("!200 ERROR\n"); } else { printf("200 OK\n"); } Qiniu_Free(uploadtoken); #endif #if 1 //download Qiniu_RS_GetPolicy getPolicy; Qiniu_Zero(getPolicy); //char* domain = Qiniu_String_Concat2("heenbo-test", "o9mmpvxgk.bkt.clouddn.com"); char* domain = Qiniu_String_Concat2("", "o9mmpvxgk.bkt.clouddn.com"); printf("domain:%s\n", domain); char * baseUrl = Qiniu_RS_MakeBaseUrl(domain, "a.txt"); printf("baseUrl: %s\n", baseUrl); char * url = Qiniu_RS_GetPolicy_MakeRequest(&getPolicy, baseUrl, &mac); printf("url:%s\n", url); Qiniu_Free(baseUrl); Qiniu_Free(url); Qiniu_Free(domain); #endif Qiniu_Client_Cleanup(&client); Qiniu_Servend_Cleanup(); return 0; }
Qiniu_Error Qiniu_RS_BatchCopy( Qiniu_Client* self, Qiniu_RS_BatchItemRet* rets, Qiniu_RS_EntryPathPair* entryPairs, Qiniu_ItemCount entryCount) { int code; Qiniu_Error err; cJSON *root, *arrayItem, *dataItem; char *body = NULL, *bodyTmp = NULL; char *entryURISrc, *entryURISrcEncoded, *opBody; char *entryURIDest, *entryURIDestEncoded, *bodyPart; Qiniu_ItemCount curr = 0; Qiniu_ItemCount retSize = 0; Qiniu_RS_EntryPathPair* entryPair = entryPairs; char* url = Qiniu_String_Concat2(QINIU_RS_HOST, "/batch"); curr = 0; while (curr < entryCount) { entryURISrc = Qiniu_String_Concat3(entryPair->src.bucket, ":", entryPair->src.key); entryURISrcEncoded = Qiniu_String_Encode(entryURISrc); entryURIDest = Qiniu_String_Concat3(entryPair->dest.bucket, ":", entryPair->dest.key); entryURIDestEncoded = Qiniu_String_Encode(entryURIDest); bodyPart = Qiniu_String_Concat3(entryURISrcEncoded, "/", entryURIDestEncoded); opBody = Qiniu_String_Concat2("op=/copy/", bodyPart); free(entryURISrc); free(entryURISrcEncoded); free(entryURIDest); free(entryURIDestEncoded); free(bodyPart); if (!body) { bodyTmp = opBody; } else { bodyTmp = Qiniu_String_Concat3(body, "&", opBody); free(opBody); } free(body); body = bodyTmp; curr++; entryPair = &entryPairs[curr]; } err = Qiniu_Client_CallWithBuffer(self, &root, url, body, strlen(body), "application/x-www-form-urlencoded"); free(url); /* * Bug No.(4672) Wang Xiaotao 2013\10\15 17:56:00 * Change for : free var 'body' * Reason : memory leak! */ free(body); retSize = cJSON_GetArraySize(root); curr = 0; while (curr < retSize) { arrayItem = cJSON_GetArrayItem(root, curr); code = (int)Qiniu_Json_GetInt64(arrayItem, "code", 0); dataItem = cJSON_GetObjectItem(arrayItem, "data"); rets[curr].code = code; if (code != 200) { rets[curr].error = Qiniu_Json_GetString(dataItem, "error", 0); } curr++; } return err; }
Qiniu_Error Qiniu_RS_BatchStat( Qiniu_Client* self, Qiniu_RS_BatchStatRet* rets, Qiniu_RS_EntryPath* entries, Qiniu_ItemCount entryCount) { int code; Qiniu_Error err; cJSON *root, *arrayItem, *dataItem; char *body = NULL, *bodyTmp = NULL; char *entryURI, *entryURIEncoded, *opBody; Qiniu_RS_EntryPath* entry = entries; Qiniu_ItemCount curr = 0; Qiniu_ItemCount retSize = 0; char* url = Qiniu_String_Concat2(QINIU_RS_HOST, "/batch"); while (curr < entryCount) { entryURI = Qiniu_String_Concat3(entry->bucket, ":", entry->key); entryURIEncoded = Qiniu_String_Encode(entryURI); opBody = Qiniu_String_Concat2("op=/stat/", entryURIEncoded); free(entryURI); free(entryURIEncoded); if (!body) { bodyTmp = opBody; } else { bodyTmp = Qiniu_String_Concat3(body, "&", opBody); free(opBody); } free(body); body = bodyTmp; curr++; entry = &entries[curr]; } err = Qiniu_Client_CallWithBuffer(self, &root, url, body, strlen(body), "application/x-www-form-urlencoded"); free(url); /* * Bug No.(4672) Wang Xiaotao 2013\10\15 17:56:00 * Change for : free var 'body' * Reason : memory leak! */ free(body); retSize = cJSON_GetArraySize(root); curr = 0; while (curr < retSize) { arrayItem = cJSON_GetArrayItem(root, curr); code = (int)Qiniu_Json_GetInt64(arrayItem, "code", 0); dataItem = cJSON_GetObjectItem(arrayItem, "data"); rets[curr].code = code; if (code != 200) { rets[curr].error = Qiniu_Json_GetString(dataItem, "error", 0); } else { rets[curr].data.hash = Qiniu_Json_GetString(dataItem, "hash", 0); rets[curr].data.mimeType = Qiniu_Json_GetString(dataItem, "mimeType", 0); rets[curr].data.fsize = Qiniu_Json_GetInt64(dataItem, "fsize", 0); rets[curr].data.putTime = Qiniu_Json_GetInt64(dataItem, "putTime", 0); } curr++; } return err; }