试图在程序中替换文件时出现"No response body"错误(C++)

0

【以下的问题经过翻译处理】 在我的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,但那是一样的)。

非常感谢。

profile picture
专家
已提问 5 个月前29 查看次数
1 回答
0

【以下的回答经过翻译处理】 我解决了自己的问题:我发送给 std :: fstream 的文件路径为空,因此 AWS 没有接收到任何数据。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则