我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?

Posted

技术标签:

【中文标题】我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?【英文标题】:Can I get the Content-Type from an S3 object stream without making an explicit call to headObject? 【发布时间】:2015-04-14 04:10:54 【问题描述】:

我正在从 S3 流式传输文件并通过我的 API 到客户端,以执行访问控制规则。为此,我需要适当地设置内容类型标头。有谁知道无需单独调用 headObject 即可从 S3 获取内容类型的方法?现在我必须先获取对象元数据,然后再发出另一个请求来获取对象流。

编辑: 为了澄清,我正在使用

return s3.getObject(params).createReadStream();

获取流,所以我知道没有回调。

【问题讨论】:

A GET 请求在您从 HEAD 请求获得的标头中返回完全相同的元数据......所以看起来您应该已经在数据中拥有您正在寻找的东西。来自 getObject 的回调中的 ContentType。你不会吗? 看看***.com/questions/35782434/… 【参考方案1】:

S3 将使用您指定的Content-Type 保存对象,同时通过调用putObject 函数保存数据。

s3Instance.putObject(
  Bucket: "my-bucket",
  ContentType: "application/xml",
  Body: xmlContent
, function(err) 
  //callback here
);

来源:http://docs.aws.amazon.com/AWSjavascriptSDK/latest/AWS/S3.html#putObject-property

调用getObject 函数时返回对象的Content-Type 将与您在上面指定的相同。但是,您可以在调用 getObject 函数时设置所需的 Content-Type

s3Instance.getObject(
  Bucket: "my-bucket",
  Key: "MyXMLFile",
  ContentType: "text/xml"
, function(err, data) 
  //callback here
);

来源:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property

【讨论】:

这没有回答使用s3.getObject(params).createReadStream() 模式时如何访问内容类型标头的问题。 返回Unexpected key 'ContentType'

以上是关于我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 如何在不显式实现线程的情况下同时运行两个插槽

如何在不显式编译的情况下让 Visual Studio 错误检查我的代码(显示曲线)?

如何在不显式导入的情况下使新的装饰器在类中可用?

如果通过 spark-submit 提交作业,我们可以在不显式创建的情况下使用 spark 会话对象吗

数组适配器中的 get count() 如何在不显式返回数组大小的情况下返回值?

使用姐妹继承