【以下的问题经过翻译处理】 在我的C++项目中使用S3 API,我有一个函数,基本上就像这样:
void replaceFile(const std::string &key, const std::string &filePathToUpload, std::function<void (const Aws::S3::Model::PutObjectOutcome &)> successCallback, std::function<void (const Aws::S3::Model::PutObjectOutcome &)> failureCallback)
{
Aws::S3::S3Client client;
Aws::S3::Model::PutObjectRequest req;
req.SetBucket("我的存储桶名称");
req.SetBody(std::make_shared<std::fstream>(filePathToUpload));
req.SetACL(Aws::S3::Model::ObjectCannedACL::public_read);
req.SetKey(key);
if (auto outcome = client.PutObject(req); outcome.IsSuccess())
successCallback(outcome);
else
failureCallback(outcome);
}
基本上,我想替换已经上传的文件。(我想我真的可以重新上传文件,但我没想到那个。然而,上传函数也有同样的问题。)不幸的是,这个函数不起作用。它向AWS发送数据,但最终出现错误"No response body."。这个错误是HTTP 400,内部错误代码为100,是Aws::S3::S3Errors::UNKNOWN
。我查看了SDK问题列表,寻找涉及此错误消息的问题,发现了几个看起来相似的问题,但它们都与HEAD有关,而不是PUT。SDK是否在我的背后执行HEAD请求?我有漏掉了什么吗?有什么错误吗?
我在openSUSE Tumbleweed上运行这个项目,使用的是SDK版本1.9.180 (好吧,好吧,我用的是~~master
~~ main
,但那是一样的)。
非常感谢。