使用 AWS c++ 接口将文件上传到 s3 时,Content-Type 标签不正确

Posted

技术标签:

【中文标题】使用 AWS c++ 接口将文件上传到 s3 时,Content-Type 标签不正确【英文标题】:Content-Type tag incorrect when uploading file to s3 using the AWS c++ interface 【发布时间】:2018-01-11 09:08:14 【问题描述】:

我正在尝试使用 AWS C++ 开发工具包将文件上传到 S3。文件传输得很好,但内容类型是“binary/octet-stream”而不是“text/html”。当我在 S3 控制台中查看文件时。有一个“text/html”类型的“x-amz-meta-content-type”元数据记录。如何设置我要上传的文件的实际内容类型?

int main (int, char**)

   Aws::SDKOptions options;
   Aws::InitAPI (options);
   client = new Aws::S3::S3Client;

   Aws::S3::Model::PutObjectRequest request;
   request.SetBucket ("mywebsite.notreal.net");
   request.SetKey ("index.html");
   request.SetACL (Aws::S3::Model::ObjectCannedACL::public_read);
   request.SetContentEncoding ("UTF-8");
   request.AddMetadata ("Content-Type", "text/html");

   auto inputData = Aws::MakeShared<Aws::FStream> ("PutObjectInputStream", "index.html", std::ios_base::in | std::ios_base::ate);
   request.SetContentLength (inputData-> tellg ());
   request.SetBody (inputData);

   auto result = client-> PutObject (request);
   return result.IsSuccess () ? 0 : 1;

v

【问题讨论】:

不要使用AddMetadataContent-Type 需要在 PUT 请求的 HTTP 标头中设置。有一个可用的SetContentType 函数,继承自Aws::AmazonStreamingWebServiceRequest 【参考方案1】:

Content-Type 需要在实际 PUT 请求中设置为 HTTP 标头。

查看documentation,有一个SetContentType 方法可以使用。

【讨论】:

以上是关于使用 AWS c++ 接口将文件上传到 s3 时,Content-Type 标签不正确的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中使用 aws-amplify 将文件上传到具有联合身份的 S3 时出错

上传到 AWS S3 时,Java 中的最大文件上传大小是多少?

如何使用 aws-sdk 将文件同步上传到 S3?

如何使用 AWS AppSync 将文件上传到 AWS S3

在 IOS 上使用 AWS AppSync 将图像上传到 S3

使用适用于 Node.js 的 AWS 开发工具包将二进制文件上传到 S3