开发者社区 问答 正文

对象存储 OSS下载文件到内存

已解决

展开
收起
2018-03-04 08:36:29 1770 分享 版权
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    通过oss_get_object_to_buffer接口,可以实现将文件下载到内存中:

    1. aos_pool_t *p;
    2. oss_request_options_t *options;
    3. aos_status_t *s;
    4. aos_table_t *headers;
    5. aos_table_t *params;
    6. aos_table_t *resp_headers;
    7. char *bucket_name = "<您的bucket名字>";
    8. char *object_name = "<您的object名字>";
    9. aos_string_t bucket;
    10. aos_string_t object;
    11. aos_list_t buffer;
    12. aos_buf_t *content;
    13. char *buf;
    14. int64_t len = 0;
    15. int64_t size = 0;
    16. int64_t pos = 0;
    17. aos_pool_create(&p, NULL);
    18. /* 创建并初始化options */
    19. options = oss_request_options_create(p);
    20. init_options(options);
    21. /* 初始化参数 */
    22. aos_str_set(&object, object_name);
    23. aos_str_set(&bucket, bucket_name);
    24. headers = aos_table_make(p, 0);
    25. params = aos_table_make(p, 0);
    26. /* 下载文件 */
    27. aos_list_init(&buffer);
    28. s = oss_get_object_to_buffer(options, &bucket, &object, &buffer, headers, params, &resp_headers);
    29. if (aos_status_is_ok(s)) {
    30. printf("get object succeeded\n");
    31. /* 将下载内容拷贝到buffer中*/
    32. len = aos_buf_list_len(&buffer);
    33. buf = aos_pcalloc(p, len + 1);
    34. buf[len] = '\0';
    35. aos_list_for_each_entry(content, &buffer, node) {
    36. size = aos_buf_size(content);
    37. memcpy(buf + pos, content->pos, size);
    38. pos += size;
    39. }
    40. } else {
    41. printf("get object failed\n");
    42. }
    43. aos_pool_destroy(p);

    注:

    • 2.0.0相对于1.0.0版本,oss_get_object_to_buffer接口增加了params参数,同时headers和params允许为NULL,1.0.0及其之前版本不支持为NULL
    • oss_get_object_to_buffer_by_url和oss_get_object_to_file_by_url参数也增加了params参数
    • 完整代码参考:GitHub
    2018-03-06 22:02:12
    赞同 展开评论