Загрузить файлы на Google Drive через HTTP-запрос (C) - PullRequest
2 голосов
/ 15 апреля 2019

Я хочу загрузить файлы на Google Диск с помощью программирования на языке C.

Я следовал приведенным ниже инструкциям Учебное пособие Google & Пример libcurl .

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);

Спасибо!

1 Ответ

2 голосов
/ 15 апреля 2019

[JPEG_DATA] будет точным содержимым файла, байт за байт. [NUMBER_OF_BYTES_IN_FILE] - размер файла и совпадение с количеством байтов в [JPEG_DATA].

Вы можете увидеть post-callback.c , чтобы узнать, как добавить полезную нагрузку в запрос POST, и httpput.c , чтобы увидеть, как постепенно читать данные из файла. .

...