从AWS S3获取对象作为流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从AWS S3获取对象作为流相关的知识,希望对你有一定的参考价值。
我试图弄清楚是否有可能返回我从AWS S3存储桶获取的某个对象的某种流(可能是内存流?)。
S3存储桶包含许多不同类型的图像,文档等。所有这些都应该在我的网站上使用。但是,我不想显示AWS S3存储桶的路径。 这就是为什么我试图创建一个流并在运行中显示图像和可下载文档而不是完整路径。这有意义吗? :-)
我正在使用C#/ .NET AWS SDK。
期待听到任何想法和方向指向!
public FileStream GetFile(string keyName)
{
using (client = new AmazonS3Client(Amazon.RegionEndpoint.USEast2))
{
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (GetObjectResponse response = client.GetObject(request))
using (Stream responseStream = response.ResponseStream)
using (StreamReader reader = new StreamReader(responseStream))
{
// The following outputs the content of my text file:
Console.WriteLine(reader.ReadToEnd());
// Do some magic to return content as a stream
}
}
}
答案
在.NET 4中,您可以使用Stream.CopyTo将ResponseStream的内容(即Amazon.Runtime.Internal.Util.MD5Stream)复制到MemoryStream。
GetObjectResponse getObjRespone = client.GetObject(Bucket, objectName);
MemoryStream stream = new MemoryStream();
getObjRespone.ResponseStream.CopyTo(stream);
return stream;
其中client.GetObject(Bucket, objectName)
是使用您正在创建的请求调用GetObject的替代方法。
以上是关于从AWS S3获取对象作为流的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS kinesis-firehose 将数据写入文件
AWS Lambda 返回权限被拒绝尝试从 S3 存储桶获取对象