-3

I am developing a function "uploading file to Google Drive folder" using c++ / Poco library.

File is always getting uploaded to root folder only

I have added optional parameter parents as below

std::string strParents = "[ { "id": "" + std::string(locationId) + ""} ]"

The code that I am currently using is as below and it uploads to root folder only.

    Poco::URI uri("https://www.googleapis.com/upload/drive/v3/files");
    uri.addQueryParameter("uploadType", "resumable");
    uri.addQueryParameter("supportsAllDrives", "true");
    uri.addQueryParameter("name", targetFilePath.filename().string());
    uri.addQueryParameter("description", "file from sdk");
    uri.addQueryParameter("properties", metaData);
    std::string strParents = "[ { \"id\": \"" + std::string(locationId) + "\"} ]";
    uri.addQueryParameter("parents", strParents);
    Poco::Net::HTTPRequest* req = new Poco::Net::HTTPRequest(Poco::Net::HTTPRequest::HTTP_POST, uri.toString(), Poco::Net::HTTPMessage::HTTP_1_1);
    req->add("Authorization", std::string("Bearer ") + accessToken);
    req->add("Content-Type", "application/json; charset=UTF-8");
    req->add("X-Upload-Content-Type", "application/octet-stream"); 
    req->add("X-Upload-Content-Length", std::to_string(iFileSize));
    //req->add("parents", std::string("[{\"id\":\"") + locationId + std::string("\"}]"));
    req->add("parents", strParents); // added here also as a trial

Whatever the format I set for parents option, its uploading to root folder only.

Vishwamithra
  • 190
  • 9

1 Answers1

0

I have found the issue. The issue is with Poco usage.

Its for those developers who are struggling like me.

"parents" should be added as an array object. Not as a single key-value object

if I add as below

fileDataObject.add("parents", "[ id ]");

its taking as a single value. When I stringify the post body, parents value appeared as below

parents : "[ *id* ]"

but it should come as

parents : [ *id* ]

Then I have added it as an array object as below

Poco::JSON::Object fileDataObject;
Poco::JSON::Array parents;
parents.add(parentId);
fileDataObject.set("name", targetFilePath.filename().generic_wstring());
fileDataObject.set("parents", parents);
Vishwamithra
  • 190
  • 9