使用C#从Stream获取S3图像的大小

时间:2014-02-26 11:40:44

标签: c# amazon-web-services amazon-s3 stream

我已将图片上传到Amazon Web Service S3。我正在使用client.GetObject从S3读取图像。

我正在将图像转换为一系列字节。为了做到这一点,我正在使用byte[]创建一个缓冲区(Stream.read)来保存数据。

为了做到这一点,我需要为缓冲区数组分配适当的字节数。

我的问题是:如何在将图像读取到S3Response object之后获取图像的大小。我知道我可以运行responseObject.ResponseStream来获取流,但是我如何获得图像的大小流?

使用AWS SDK .NET C#进行开发

3 个答案:

答案 0 :(得分:1)

AWS Sdk中的TransferUtility有一个更好的优化解决方案,用于在s3之间传输文件。为:

using (var fileTransferUtility = new TransferUtility(client))
{
    var request = new TransferUtilityDownloadRequest();
    request.BucketName = BucketName;
    request.FilePath = desination;
    request.Key = key;
    fileTransferUtility.Download(request);
}

答案 1 :(得分:0)

您可以使用ResponseStream.Length属性,该属性以字节为单位给出对象的长度。

答案 2 :(得分:0)

ResponseStream.Length会抛出异常,因为它是一个网络流(“不支持搜索”)。

在请求流本身之前,请通过目录列表获取其信息:

var request = new ListObjectsV2Request
{
    BucketName = bucketName,
    Prefix = $"{folderName}/{fileName}"
};
var response = Client.ListObjectsV2(request);
var fileSize = response.S3Objects.Any() ? response.S3Objects.First().Size : 0;