c - 通过 HTTP 请求上传文件到 Google Drive (C)

标签 c rest http google-drive-api libcurl

我想使用 C 编程将文件上传到 Google 云端硬盘。

我遵循了 Google's tutorial 的以下说明& libcurl example .

POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media HTTP/1.1
Content-Type: image/jpeg
Content-Length: [NUMBER_OF_BYTES_IN_FILE]
Authorization: Bearer [YOUR_AUTH_TOKEN]

[JPEG_DATA]

但我不知道我应该用[JPEG_DATA]替换什么。它是指文件名吗?

对于 Content-Length: [NUMBER_OF_BYTES_IN_FILE],这是否意味着我应该用我的计算机显示的准确文件大小替换它?

到目前为止我写的代码:

curl_handle = curl_easy_init();

struct curl_slist *header = NULL;

/* Content-Type: image/jpeg */
header = curl_slist_append(header, "Content-Type: image/jpeg");

不确定要在下面的 [NUMBER_OF_BYTES_IN_FILE] 中放入什么

/* Content-Length: [NUMBER_OF_BYTES_IN_FILE] */
header = curl_slist_append(header, "Content-Length:[NUMBER_OF_BYTES_IN_FILE]");
/* Authorization: Bearer [YOUR_AUTH_TOKEN] */
char auth[200];
strcat(auth, "Authorization: Bearer ");
strcat(auth, access_token);

header = curl_slist_append(header, auth);

curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, header);

/* POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media HTTP/1.1 */
curl_easy_setopt(curl_handle, CURLOPT_URL, "https://www.googleapis.com/upload/drive/v3/files");

curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, "uploadType=media");

curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);

curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");

res = curl_easy_perform(curl_handle);

/* Print response */
if(res != CURLE_OK) {
    fprintf(stderr, "curl_easy_perform() failed: %s\n",
    curl_easy_strerror(res4));
}

else {
    printf("%s\n", chunk.memory);
}

curl_easy_cleanup(curl_handle);

free(chunk.memory);

谢谢!

最佳答案

[JPEG_DATA] 将是文件的确切内容,一个字节接一个字节。 [NUMBER_OF_BYTES_IN_FILE] 是文件的大小,巧合的是 [JPEG_DATA] 中的字节数。

可以看到post-callback.c查看如何将负载添加到 POST 请求,以及 httpput.c查看如何从文件中增量读取数据。

关于c - 通过 HTTP 请求上传文件到 Google Drive (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55683419/

相关文章:

c - 如何在cython中处理C typedef?

php - 使用 Dwolla 的 API 汇款并使用 PHP 进行汇款?

javascript - Ember-data: "no model found"在那里

sockets - HTTP 丢包

C - fread() 到缓冲区索引

用 c 计算毕达哥拉斯三元组

xml - 海康威视日志搜索 REST API(POST 方法)给出无效的 XML 格式

asp.net - 从跨平台移动应用程序使用 REST 和 ASP.NET Web Api 进行身份验证和授权

javascript - CORS HTTP header 点

c - 如何生成不同的随机数?