账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    七牛云存储 文件追加上传
    17
    0

    现在需要将一台设备实时生成视频流文件存储到云端,但是在七牛的c-sdk中,没有发现类似于阿里云的文件追加上传接口,只有一个分片上传接口但是被封装起来了,没有类似的Demo。

    阿里云相关接口:

    void append_object_from_buffer()
    {
        aos_pool_t *p = NULL;
        aos_string_t bucket;
        aos_string_t object;
        char *str = "test oss c sdk";
        aos_status_t *s = NULL;
        int64_t position = 0;
        aos_table_t *headers1 = NULL;
        aos_table_t *headers2 = NULL;
        aos_table_t *resp_headers = NULL;
        oss_request_options_t *options = NULL;
        aos_list_t buffer;
        aos_buf_t *content = NULL;
        char *next_append_position = NULL;
        aos_pool_create(&p, NULL);
        /* 创建并初始化options */
        options = oss_request_options_create(p);
        init_options(options);
        /* 初始化参数 */
        headers1 = aos_table_make(p, 0);
        aos_str_set(&bucket, "<您的bucket名字>");
        aos_str_set(&object, "<您的object名字>");
        /* 获取起始追加位置 */
        s = oss_head_object(options, &bucket, &object, headers1, &resp_headers);
        if (aos_status_is_ok(s)) {
            next_append_position = (char*)(apr_table_get(resp_headers, 
                            "x-oss-next-append-position"));
            position = atoi(next_append_position);
        }
        /* 追加文件 */
        headers2 = aos_table_make(p, 0);
        aos_list_init(&buffer);
        content = aos_buf_pack(p, str, strlen(str));
        aos_list_add_tail(&content->node, &buffer);
        s = oss_append_object_from_buffer(options, &bucket, &object, 
                position, &buffer, headers2, &resp_headers);
        /* 判断是否追加成功 */
        if (aos_status_is_ok(s))
        {
            printf("append object from buffer succeeded\n");
        } else {
            printf("append object from buffer failed\n");
        }
        /* 释放资源*/
        aos_pool_destroy(p);
    }

    七牛上有个好像是我需求的接口,但是没Demo和帮助文档,所以不知道该如何使用:

    Qiniu_Error Qiniu_Io_PutStream(
            Qiniu_Client *self, Qiniu_Io_PutRet *ret,
            const char *uptoken, const char *key,
            void *ctx, size_t fsize, rdFunc rdr,
            Qiniu_Io_PutExtra *extra) {
        Qiniu_Io_form form;
        Qiniu_Io_form_init(&form, uptoken, key, &extra);
    
        if (key == NULL) {
            // Use an empty string instead of the NULL pointer to prevent the curl lib from crashing
            // when read it.
            // **NOTICE**: The magic variable $(filename) will be set as empty string.
            key = "";
        }
    
        // Add 'filename' property to make it like a file upload one
        // Otherwise it may report: CURL_ERROR(18) or "multipart/message too large"
        // See https://curl.haxx.se/libcurl/c/curl_formadd.html#CURLFORMSTREAM
        // FIXED by fengyh 2017-03-22 10:30
        curl_formadd(
                &form.formpost, &form.lastptr,
                CURLFORM_COPYNAME, "file",
                CURLFORM_FILENAME, "filename",
                CURLFORM_STREAM, ctx,
                CURLFORM_CONTENTSLENGTH, fsize,
                CURLFORM_END);
    
        return Qiniu_Io_call_with_callback(self, ret, form.formpost, rdr, extra);
    }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 魏晋南北朝的 普通会员 1楼

      七牛云存储提供了文件追加上传的功能,这在进行文件存储和共享时非常有用。以下是如何进行文件追加上传的步骤:

      1. 打开七牛云存储管理界面,选择要上传的文件。

      2. 在文件列表中,选择要上传的文件。

      3. 点击“上传”按钮,然后选择“文件追加上传”选项。

      4. 在弹出的窗口中,确认上传文件的位置,然后点击“上传”按钮。

      5. 七牛云存储会在上传完成后生成一个临时文件,以便后续的文件上传。

      6. 保存并下载临时文件,然后在需要上传的文件位置进行上传。

      通过以上步骤,您就可以在七牛云存储中进行文件的追加上传了。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部