oss_progress_sample.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. #include "aos_log.h"
  2. #include "aos_util.h"
  3. #include "aos_string.h"
  4. #include "aos_status.h"
  5. #include "oss_auth.h"
  6. #include "oss_util.h"
  7. #include "oss_api.h"
  8. #include "oss_config.h"
  9. #include "oss_sample_util.h"
  10. void put_and_get_from_buffer_with_progress()
  11. {
  12. aos_pool_t *p = NULL;
  13. char *str = "oss c sdk";
  14. aos_status_t *s = NULL;
  15. int is_cname = 0;
  16. aos_string_t bucket;
  17. aos_string_t object;
  18. aos_table_t *headers = NULL;
  19. aos_table_t *params = NULL;
  20. oss_request_options_t *options = NULL;
  21. aos_table_t *resp_headers = NULL;
  22. aos_list_t resp_body;
  23. aos_list_t buffer;
  24. aos_buf_t *content;
  25. /* init test*/
  26. aos_pool_create(&p, NULL);
  27. options = oss_request_options_create(p);
  28. init_sample_request_options(options, is_cname);
  29. aos_str_set(&bucket, BUCKET_NAME);
  30. aos_str_set(&object, OBJECT_NAME);
  31. aos_list_init(&resp_body);
  32. aos_list_init(&buffer);
  33. content = aos_buf_pack(options->pool, str, strlen(str));
  34. aos_list_add_tail(&content->node, &buffer);
  35. headers = aos_table_make(p, 1);
  36. apr_table_set(headers, "x-oss-meta-author", "oss");
  37. /* test put object */
  38. s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
  39. headers, params, percentage, &resp_headers, &resp_body);
  40. if (aos_status_is_ok(s)) {
  41. printf("put object from buffer succeeded\n");
  42. } else {
  43. printf("put object from buffer failed\n");
  44. aos_pool_destroy(p);
  45. return;
  46. }
  47. aos_pool_destroy(p);
  48. /* test get object */
  49. aos_pool_create(&p, NULL);
  50. options = oss_request_options_create(p);
  51. init_sample_request_options(options, is_cname);
  52. s = oss_do_get_object_to_buffer(options, &bucket, &object, NULL, NULL,
  53. &buffer, percentage, NULL);
  54. if (aos_status_is_ok(s)) {
  55. printf("get object to buffer succeeded\n");
  56. } else {
  57. printf("get object to buffer failed\n");
  58. }
  59. aos_pool_destroy(p);
  60. }
  61. void put_and_get_from_file_with_progress()
  62. {
  63. aos_pool_t *p = NULL;
  64. aos_status_t *s = NULL;
  65. int is_cname = 0;
  66. aos_string_t bucket;
  67. aos_string_t object;
  68. aos_string_t filename;
  69. oss_request_options_t *options = NULL;
  70. aos_table_t *resp_headers = NULL;
  71. aos_list_t resp_body;
  72. char *download_filename = "get_object_to_local_file.txt";
  73. /* init test*/
  74. aos_pool_create(&p, NULL);
  75. options = oss_request_options_create(p);
  76. init_sample_request_options(options, is_cname);
  77. aos_str_set(&bucket, BUCKET_NAME);
  78. aos_str_set(&object, OBJECT_NAME);
  79. aos_str_set(&filename, __FILE__);
  80. aos_list_init(&resp_body);
  81. /* put object */
  82. s = oss_do_put_object_from_file(options, &bucket, &object, &filename,
  83. NULL, NULL, percentage, &resp_headers, &resp_body);
  84. if (aos_status_is_ok(s)) {
  85. printf("put object from file succeeded\n");
  86. } else {
  87. printf("put object from file failed\n");
  88. aos_pool_destroy(p);
  89. return;
  90. }
  91. aos_pool_destroy(p);
  92. /* get object */
  93. aos_pool_create(&p, NULL);
  94. options = oss_request_options_create(p);
  95. init_sample_request_options(options, is_cname);
  96. aos_str_set(&filename, download_filename);
  97. s = oss_do_get_object_to_file(options, &bucket, &object, NULL, NULL,
  98. &filename, percentage, NULL);
  99. if (aos_status_is_ok(s)) {
  100. printf("get object to file succeeded\n");
  101. } else {
  102. printf("get object to file failed\n");
  103. }
  104. aos_pool_destroy(p);
  105. }
  106. void append_object_with_progress()
  107. {
  108. aos_pool_t *p = NULL;
  109. char *object_name = "oss_append_object.ts";
  110. char *str = "oss c sdk";
  111. aos_status_t *s = NULL;
  112. int is_cname = 0;
  113. aos_string_t bucket;
  114. aos_string_t object;
  115. aos_string_t filename;
  116. aos_table_t *headers = NULL;
  117. aos_table_t *params = NULL;
  118. oss_request_options_t *options = NULL;
  119. aos_table_t *resp_headers = NULL;
  120. uint64_t initcrc = 0;
  121. aos_list_t resp_body;
  122. aos_list_t buffer;
  123. aos_buf_t *content;
  124. /* init test*/
  125. aos_pool_create(&p, NULL);
  126. options = oss_request_options_create(p);
  127. init_sample_request_options(options, is_cname);
  128. aos_str_set(&bucket, BUCKET_NAME);
  129. aos_str_set(&object, object_name);
  130. aos_list_init(&resp_body);
  131. aos_list_init(&buffer);
  132. content = aos_buf_pack(options->pool, str, strlen(str));
  133. aos_list_add_tail(&content->node, &buffer);
  134. headers = aos_table_make(p, 1);
  135. apr_table_set(headers, "x-oss-meta-author", "oss");
  136. /* append object from buffer */
  137. s = oss_do_append_object_from_buffer(options, &bucket, &object, 0, initcrc, &buffer,
  138. headers, params, percentage, &resp_headers, &resp_body);
  139. if (aos_status_is_ok(s)) {
  140. printf("progress: append object from buffer succeeded\n");
  141. } else {
  142. printf("progress: append object from buffer failed\n");
  143. aos_pool_destroy(p);
  144. return;
  145. }
  146. aos_pool_destroy(p);
  147. /* append object from file*/
  148. aos_pool_create(&p, NULL);
  149. options = oss_request_options_create(p);
  150. init_sample_request_options(options, is_cname);
  151. aos_str_set(&filename, __FILE__);
  152. initcrc = aos_atoui64((char*)(apr_table_get(resp_headers, OSS_HASH_CRC64_ECMA)));
  153. s = oss_do_append_object_from_file(options, &bucket, &object, strlen(str), initcrc, &filename,
  154. NULL, NULL, percentage, &resp_headers, &resp_body);
  155. if (aos_status_is_ok(s)) {
  156. printf("progress: append object from file succeeded\n");
  157. } else {
  158. printf("progress: append object from file failed\n");
  159. }
  160. oss_delete_object(options, &bucket, &object, NULL);
  161. aos_pool_destroy(p);
  162. }
  163. void multipart_upload_from_buffer_with_progress()
  164. {
  165. aos_pool_t *p = NULL;
  166. aos_string_t bucket;
  167. aos_string_t object;
  168. int is_cname = 0;
  169. oss_request_options_t *options = NULL;
  170. aos_status_t *s = NULL;
  171. aos_list_t buffer;
  172. oss_list_upload_part_params_t *params = NULL;
  173. aos_string_t upload_id;
  174. aos_list_t complete_part_list;
  175. oss_list_part_content_t *part_content1 = NULL;
  176. oss_complete_part_content_t *complete_content1 = NULL;
  177. int part_num = 1;
  178. aos_pool_create(&p, NULL);
  179. options = oss_request_options_create(p);
  180. init_sample_request_options(options, is_cname);
  181. aos_str_set(&bucket, BUCKET_NAME);
  182. aos_str_set(&object, OBJECT_NAME);
  183. // init mulitipart
  184. s = oss_init_multipart_upload(options, &bucket, &object, &upload_id, NULL, NULL);
  185. if (aos_status_is_ok(s)) {
  186. printf("Init multipart upload succeeded, upload_id:%.*s\n",
  187. upload_id.len, upload_id.data);
  188. } else {
  189. printf("Init multipart upload failed\n");
  190. aos_pool_destroy(p);
  191. return;
  192. }
  193. // upload part
  194. aos_list_init(&buffer);
  195. make_random_body(p, 200, &buffer);
  196. s = oss_do_upload_part_from_buffer(options, &bucket, &object, &upload_id,
  197. part_num++, &buffer, percentage, NULL, NULL, NULL, NULL);
  198. if (aos_status_is_ok(s)) {
  199. printf("Upload multipart part succeeded\n");
  200. } else {
  201. printf("Upload multipart part failed\n");
  202. aos_pool_destroy(p);
  203. return;
  204. }
  205. aos_list_init(&buffer);
  206. make_random_body(p, 200, &buffer);
  207. s = oss_do_upload_part_from_buffer(options, &bucket, &object, &upload_id,
  208. part_num++, &buffer, percentage, NULL, NULL, NULL, NULL);
  209. if (aos_status_is_ok(s)) {
  210. printf("Upload multipart part succeeded\n");
  211. } else {
  212. printf("Upload multipart part failed\n");
  213. aos_pool_destroy(p);
  214. return;
  215. }
  216. // list part
  217. params = oss_create_list_upload_part_params(p);
  218. params->max_ret = 1;
  219. aos_list_init(&complete_part_list);
  220. s = oss_list_upload_part(options, &bucket, &object, &upload_id,
  221. params, NULL);
  222. aos_list_for_each_entry(oss_list_part_content_t, part_content1, &params->part_list, node) {
  223. complete_content1 = oss_create_complete_part_content(p);
  224. aos_str_set(&complete_content1->part_number, part_content1->part_number.data);
  225. aos_str_set(&complete_content1->etag, part_content1->etag.data);
  226. aos_list_add_tail(&complete_content1->node, &complete_part_list);
  227. }
  228. // complete multipart
  229. s = oss_complete_multipart_upload(options, &bucket, &object, &upload_id,
  230. &complete_part_list, NULL, NULL);
  231. if (aos_status_is_ok(s)) {
  232. printf("Complete multipart upload succeeded, upload_id:%.*s\n",
  233. upload_id.len, upload_id.data);
  234. } else {
  235. printf("Complete multipart upload failed\n");
  236. }
  237. aos_pool_destroy(p);
  238. }
  239. void multipart_upload_from_file_with_progress()
  240. {
  241. aos_pool_t *p = NULL;
  242. aos_string_t bucket;
  243. aos_string_t object;
  244. int is_cname = 0;
  245. oss_request_options_t *options = NULL;
  246. aos_status_t *s = NULL;
  247. oss_list_upload_part_params_t *params = NULL;
  248. aos_string_t upload_id;
  249. aos_list_t complete_part_list;
  250. oss_upload_file_t *upload_file = NULL;
  251. oss_list_part_content_t *part_content1 = NULL;
  252. oss_complete_part_content_t *complete_content1 = NULL;
  253. int part_num = 1;
  254. aos_pool_create(&p, NULL);
  255. options = oss_request_options_create(p);
  256. init_sample_request_options(options, is_cname);
  257. aos_str_set(&bucket, BUCKET_NAME);
  258. aos_str_set(&object, OBJECT_NAME);
  259. upload_file = oss_create_upload_file(p);
  260. aos_str_set(&upload_file->filename, __FILE__);
  261. // init mulitipart
  262. s = oss_init_multipart_upload(options, &bucket, &object, &upload_id, NULL, NULL);
  263. if (aos_status_is_ok(s)) {
  264. printf("Init multipart upload succeeded, upload_id:%.*s\n",
  265. upload_id.len, upload_id.data);
  266. } else {
  267. printf("Init multipart upload failed\n");
  268. aos_pool_destroy(p);
  269. return;
  270. }
  271. // upload part
  272. upload_file->file_pos = 0;
  273. upload_file->file_last = 1024;
  274. s = oss_do_upload_part_from_file(options, &bucket, &object, &upload_id,
  275. part_num++, upload_file, percentage, NULL, NULL, NULL, NULL);
  276. if (aos_status_is_ok(s)) {
  277. printf("Upload multipart part succeeded\n");
  278. } else {
  279. printf("Upload multipart part failed\n");
  280. aos_pool_destroy(p);
  281. return;
  282. }
  283. // list part
  284. params = oss_create_list_upload_part_params(p);
  285. params->max_ret = 1;
  286. aos_list_init(&complete_part_list);
  287. s = oss_list_upload_part(options, &bucket, &object, &upload_id,
  288. params, NULL);
  289. aos_list_for_each_entry(oss_list_part_content_t, part_content1, &params->part_list, node) {
  290. complete_content1 = oss_create_complete_part_content(p);
  291. aos_str_set(&complete_content1->part_number, part_content1->part_number.data);
  292. aos_str_set(&complete_content1->etag, part_content1->etag.data);
  293. aos_list_add_tail(&complete_content1->node, &complete_part_list);
  294. }
  295. // complete multipart
  296. s = oss_complete_multipart_upload(options, &bucket, &object, &upload_id,
  297. &complete_part_list, NULL, NULL);
  298. if (aos_status_is_ok(s)) {
  299. printf("Complete multipart upload succeeded, upload_id:%.*s\n",
  300. upload_id.len, upload_id.data);
  301. } else {
  302. printf("Complete multipart upload failed\n");
  303. }
  304. aos_pool_destroy(p);
  305. }
  306. void progress_sample()
  307. {
  308. put_and_get_from_buffer_with_progress();
  309. put_and_get_from_file_with_progress();
  310. append_object_with_progress();
  311. multipart_upload_from_buffer_with_progress();
  312. multipart_upload_from_file_with_progress();
  313. }