Unicode C++
Unicode C++
Upload Application Specific Data
See more Google Drive Examples
Uploads a text file (application specific data) where the contents of the file are contained in a string variable.Chilkat Unicode C++ Downloads
#include <CkJsonObjectW.h>
#include <CkAuthGoogleW.h>
#include <CkRestW.h>
void ChilkatSample(void)
{
bool success = false;
success = true;
// It requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// This example uses a previously obtained access token having permission for the
// Google Drive application specific data scope.
CkJsonObjectW jsonToken;
success = jsonToken.LoadFile(L"qa_data/tokens/googleDriveAppData.json");
CkAuthGoogleW gAuth;
gAuth.put_AccessToken(jsonToken.stringOf(L"access_token"));
CkRestW rest;
// Connect using TLS.
bool bAutoReconnect = true;
success = rest.Connect(L"www.googleapis.com",443,true,bAutoReconnect);
// Provide the authentication credentials (i.e. the access token)
rest.SetAuthGoogle(gAuth);
// A multipart upload to Google Drive needs a multipart/related Content-Type
rest.AddHeader(L"Content-Type",L"multipart/related");
// Specify each part of the request.
// The 1st part is JSON with information about the file.
rest.put_PartSelector(L"1");
rest.AddHeader(L"Content-Type",L"application/json; charset=UTF-8");
CkJsonObjectW json;
json.put_EmitCompact(false);
json.UpdateString(L"name",L"helloWorld.txt");
json.UpdateString(L"description",L"A simple text file that says Hello World.");
json.UpdateString(L"mimeType",L"text/plain");
// Specifiy the application-specific data folder.
json.UpdateString(L"parents[0]",L"appDataFolder");
rest.SetMultipartBodyString(json.emit());
wprintf(L"%s\n",json.emit());
// The JSON looks like this:
// {
// "name": "helloWorld.txt",
// "description": "A simple text file that says Hello World.",
// "mimeType": "text/plain",
// "parents": [
// "appDataFolder"
// ]
// }
// The 2nd part is the file content.
// In this case, we'll upload a simple text file containing "Hello World!"
rest.put_PartSelector(L"2");
rest.AddHeader(L"Content-Type",L"text/plain");
const wchar_t *fileContents = L"Hello World!";
rest.SetMultipartBodyString(fileContents);
const wchar_t *jsonResponse = rest.fullRequestMultipart(L"POST",L"/upload/drive/v3/files?uploadType=multipart");
if (rest.get_LastMethodSuccess() != true) {
wprintf(L"%s\n",rest.lastErrorText());
return;
}
// A successful response will have a status code equal to 200.
if (rest.get_ResponseStatusCode() != 200) {
wprintf(L"response status code = %d\n",rest.get_ResponseStatusCode());
wprintf(L"response status text = %s\n",rest.responseStatusText());
wprintf(L"response header: %s\n",rest.responseHeader());
wprintf(L"response JSON: %s\n",jsonResponse);
return;
}
// Show the JSON response.
json.Load(jsonResponse);
// Show the full JSON response.
json.put_EmitCompact(false);
wprintf(L"%s\n",json.emit());
// A successful response looks like this:
// {
// "kind": "drive#file",
// "id": "0B53Q6OSTWYoldmJ0Z3ZqT2x5MFk",
// "name": "Untitled",
// "mimeType": "text/plain"
// }
// Get the fileId:
wprintf(L"fileId: %s\n",json.stringOf(L"id"));
}