You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C++/Poco库上传文件至Google Drive指定文件夹失败

解决Google Drive可恢复上传时文件仅传至根目录的问题

你的核心问题在于Google Drive可恢复上传(resumable upload)的元数据传递方式错误:对于uploadType=resumable的请求,文件的元数据(包括parents)必须通过JSON格式的请求体发送,而不是放在URL查询参数或HTTP请求头里——你当前的两种尝试(URL参数、请求头)都不符合API要求,所以parents参数根本没被正确识别。

修正后的代码示例

#include <Poco/JSON/Object.h>
#include <Poco/JSON/Stringifier.h>

// 构建元数据JSON对象
Poco::JSON::Object::Ptr metaObj = new Poco::JSON::Object();
metaObj->set("name", targetFilePath.filename().string());
metaObj->set("description", "file from sdk");
// 若metaData本身是JSON字符串,需先解析为JSON对象再放入,否则直接赋值字符串
metaObj->set("properties", metaData);
// 添加目标文件夹ID到parents数组
Poco::JSON::Array::Ptr parentsArr = new Poco::JSON::Array();
parentsArr->add(locationId);
metaObj->set("parents", parentsArr);

// 将JSON对象序列化为字符串
std::string jsonStr;
Poco::JSON::Stringifier::stringify(metaObj, jsonStr);

// 构造请求URI,仅保留必要参数
Poco::URI uri("https://www.googleapis.com/upload/drive/v3/files");
uri.addQueryParameter("uploadType", "resumable");
uri.addQueryParameter("supportsAllDrives", "true");

// 创建HTTP请求
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->setContentLength(jsonStr.size());

// 发送请求时将jsonStr作为请求体写入输出流
// 示例(基于HTTPSClientSession):
// Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort());
// std::ostream& os = session.sendRequest(*req);
// os << jsonStr;

关键注意事项

  • 确认locationId是目标文件夹的正确ID,且授权令牌(accessToken)拥有该文件夹的写入权限。
  • 若metaData为JSON格式字符串,不要直接赋值给properties,需先解析为Poco JSON对象再放入,避免格式错误。
  • 彻底移除之前在URL参数和请求头中添加的name、description、properties、parents等元数据参数,避免冲突。

内容的提问来源于stack exchange,提问作者Vishwamithra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:45:47