void testResumableIoPut(void) { Qiniu_Client client; Qiniu_RS_PutPolicy putPolicy; Qiniu_RS_GetPolicy getPolicy; char* uptoken; char* dnBaseUrl; char* dnRequest; Qiniu_Client_InitMacAuth(&client, 1024, NULL); Qiniu_Zero(putPolicy); putPolicy.scope = bucket; uptoken = Qiniu_RS_PutPolicy_Token(&putPolicy, NULL); Qiniu_RS_Delete(&client, bucket, key); clientIoPutFile(uptoken); Qiniu_RS_Delete(&client, bucket, key); clientIoPutBuffer(uptoken); Qiniu_Free(uptoken); Qiniu_Zero(getPolicy); dnBaseUrl = Qiniu_RS_MakeBaseUrl(domain, key); dnRequest = Qiniu_RS_GetPolicy_MakeRequest(&getPolicy, dnBaseUrl, NULL); clientIoGet(dnRequest); Qiniu_Free(dnRequest); Qiniu_Free(dnBaseUrl); Qiniu_Client_Cleanup(&client); }
char* Qiniu_RS_GetPolicy_MakeRequest(Qiniu_RS_GetPolicy* auth, const char* baseUrl, Qiniu_Mac* mac) { int expires; time_t deadline; char e[11]; char* authstr; char* token; char* request; if (auth->expires) { expires = auth->expires; } else { expires = 3600; // 1小时 } time(&deadline); deadline += expires; sprintf(e, "%u", (unsigned int)deadline); if (strchr(baseUrl, '?') != NULL) { authstr = Qiniu_String_Concat3(baseUrl, "&e=", e); } else { authstr = Qiniu_String_Concat3(baseUrl, "?e=", e); } token = Qiniu_Mac_Sign(mac, authstr); request = Qiniu_String_Concat3(authstr, "&token=", token); Qiniu_Free(token); Qiniu_Free(authstr); return request; }
Qiniu_Error Qiniu_RS_Delete(Qiniu_Client* self, const char* tableName, const char* key) { Qiniu_Error err; char* entryURI = Qiniu_String_Concat3(tableName, ":", key); char* entryURIEncoded = Qiniu_String_Encode(entryURI); char* url = Qiniu_String_Concat3(QINIU_RS_HOST, "/delete/", entryURIEncoded); Qiniu_Free(entryURI); Qiniu_Free(entryURIEncoded); err = Qiniu_Client_CallNoRet(self, url); Qiniu_Free(url); return err; }
void cdn_create_timestamp_url() { char *host = "http://v1.cdn.example.com"; char *fileName = "video/caipu/201708/0600/s/5985f37b37025.mp4/eGgxMDgwcA.m3u8"; char *cryptKey = "xxx"; char *queryStr = "name=七牛&age=27"; char *finalUrl; Qiniu_Uint64 deadline = Qiniu_Tm_LocalTime() + 3600; finalUrl = Qiniu_CDN_CreateTimestampAntiLeechURL(host, fileName, queryStr, deadline, cryptKey); printf("%s\n", finalUrl); Qiniu_Free(finalUrl); }
char* Qiniu_RS_MakeBaseUrl(const char* domain, const char* key) { Qiniu_Bool fesc; char* baseUrl; char* escapedKey = Qiniu_PathEscape(key, &fesc); baseUrl = Qiniu_String_Concat("http://", domain, "/", escapedKey, NULL); if (fesc) { Qiniu_Free(escapedKey); } return baseUrl; }
void up_chunk_upload() { Qiniu_Global_Init(-1); Qiniu_Rio_PutRet putRet; Qiniu_Client client; Qiniu_RS_PutPolicy putPolicy; Qiniu_Rio_PutExtra putExtra; char *accessKey = getenv("QINIU_ACCESS_KEY"); char *secretKey = getenv("QINIU_SECRET_KEY"); char *bucket = getenv("QINIU_TEST_BUCKET"); char *key = "2017/08/12/upload.mp4"; char *localFile = "E:\\Data\\upload.mp4"; Qiniu_Mac mac; mac.accessKey = accessKey; mac.secretKey = secretKey; Qiniu_Zero(putPolicy); Qiniu_Zero(putExtra); putPolicy.scope = bucket; char *uptoken = Qiniu_RS_PutPolicy_Token(&putPolicy, &mac); //设置机房域名 //Qiniu_Use_Zone_Beimei(Qiniu_False); //Qiniu_Use_Zone_Huabei(Qiniu_True); Qiniu_Use_Zone_Huadong(Qiniu_False); //Qiniu_Use_Zone_Huanan(Qiniu_True); //put extra //putExtra.upHost="http://nbxs-gate-up.qiniu.com"; putExtra.mimeType="video/x-mp4"; //init Qiniu_Client_InitMacAuth(&client, 1024, &mac); Qiniu_Error error = Qiniu_Rio_PutFile(&client, &putRet, uptoken, key, localFile, &putExtra); if (error.code != 200) { printf("upload file %s:%s error.\n", bucket, key); debug_log(&client, error); } else { /*200, 正确返回了, 你可以通过statRet变量查询一些关于这个文件的信息*/ printf("upload file %s:%s success.\n\n", bucket, key); printf("key:\t%s\n", putRet.key); printf("hash:\t%s\n", putRet.hash); } Qiniu_Free(uptoken); Qiniu_Client_Cleanup(&client); }
Qiniu_Error Qiniu_RS_Stat( Qiniu_Client* self, Qiniu_RS_StatRet* ret, const char* tableName, const char* key) { Qiniu_Error err; cJSON* root; char* entryURI = Qiniu_String_Concat3(tableName, ":", key); char* entryURIEncoded = Qiniu_String_Encode(entryURI); char* url = Qiniu_String_Concat3(QINIU_RS_HOST, "/stat/", entryURIEncoded); Qiniu_Free(entryURI); Qiniu_Free(entryURIEncoded); err = Qiniu_Client_Call(self, &root, url); Qiniu_Free(url); if (err.code == 200) { ret->hash = Qiniu_Json_GetString(root, "hash", 0); ret->mimeType = Qiniu_Json_GetString(root, "mimeType", 0); ret->fsize = Qiniu_Json_GetInt64(root, "fsize", 0); ret->putTime = Qiniu_Json_GetInt64(root, "putTime", 0); } return err; }
int GetUploadToken(char *pBuf, int nBufLen) { #ifdef DISABLE_OPENSSL memset(pBuf, 0, nBufLen); CURL *curl; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, "http://39.107.247.14:8086/qiniu/upload/token"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeData); struct CurlToken token; token.pData = pBuf; token.nDataLen = nBufLen; token.nCurlRet = 0; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &token); int ret =curl_easy_perform(curl); if (ret != 0) { curl_easy_cleanup(curl); return ret; } curl_easy_cleanup(curl); return token.nCurlRet; #else if (gAk[0] == 0 || gSk[0] == 0 || gBucket[0] == 0) return -11; memset(pBuf, 0, nBufLen); Qiniu_Mac mac; mac.accessKey = gAk; mac.secretKey = gSk; Qiniu_RS_PutPolicy putPolicy; Qiniu_Zero(putPolicy); putPolicy.scope = gBucket; putPolicy.expires = 40; putPolicy.deleteAfterDays = 7; putPolicy.callbackBody = "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"fsize\":$(fsize),\"bucket\":\"$(bucket)\",\"name\":\"$(x:name)\",\"duration\":\"$(avinfo.format.duration)\"}"; putPolicy.callbackUrl = CALLBACK_URL; putPolicy.callbackBodyType = "application/json"; char *uptoken; uptoken = Qiniu_RS_PutPolicy_Token(&putPolicy, &mac); assert(nBufLen > strlen(uptoken)); strcpy(pBuf, uptoken); Qiniu_Free(uptoken); return 0; #endif }
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; }
char* Qiniu_RS_PutPolicy_Token(Qiniu_RS_PutPolicy* auth, Qiniu_Mac* mac) { int expires; time_t deadline; char* authstr; char* token; cJSON* root = cJSON_CreateObject(); if (auth->scope) { cJSON_AddStringToObject(root, "scope", auth->scope); } if (auth->callbackUrl) { cJSON_AddStringToObject(root, "callbackUrl", auth->callbackUrl); } if (auth->callbackBody) { cJSON_AddStringToObject(root, "callbackBody", auth->callbackBody); } if (auth->asyncOps) { cJSON_AddStringToObject(root, "asyncOps", auth->asyncOps); } if (auth->returnUrl) { cJSON_AddStringToObject(root, "returnUrl", auth->returnUrl); } if (auth->returnBody) { cJSON_AddStringToObject(root, "returnBody", auth->returnBody); } if (auth->endUser) { cJSON_AddStringToObject(root, "endUser", auth->endUser); } if (auth->persistentOps) { cJSON_AddStringToObject(root, "persistentOps", auth->persistentOps); } if (auth->persistentNotifyUrl) { cJSON_AddStringToObject(root, "persistentNotifyUrl", auth->persistentNotifyUrl); } if (auth->persistentPipeline) { cJSON_AddStringToObject(root, "persistentPipeline", auth->persistentPipeline); } if (auth->mimeLimit) { cJSON_AddStringToObject(root, "mimeLimit", auth->mimeLimit); } if (auth->fsizeLimit) { cJSON_AddNumberToObject(root, "fsizeLimit", auth->fsizeLimit); } if (auth->detectMime) { cJSON_AddNumberToObject(root, "detectMime", auth->detectMime); } if (auth->insertOnly) { cJSON_AddNumberToObject(root, "insertOnly", auth->insertOnly); } if (auth->expires) { expires = auth->expires; } else { expires = 3600; // 1小时 } time(&deadline); deadline += expires; cJSON_AddNumberToObject(root, "deadline", deadline); authstr = cJSON_PrintUnformatted(root); cJSON_Delete(root); token = Qiniu_Mac_SignToken(mac, authstr); Qiniu_Free(authstr); return token; }