试图在程序中替换文件时出现"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
EXPERTE
gefragt vor 5 Monaten41 Aufrufe
1 Antwort
0

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

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen