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



我已经将图像上传到亚马逊云科技 S3。我正在使用 S3 从 client.GetObject 读取图像。

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

为此,我需要为缓冲数组分配适量的字节。

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

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

将文件传输到 s3 和从 s3 传输文件的更好且优化的解决方案是 AWS SDK 中的 TransferUtility。如:

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

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

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;

相关内容

  • 没有找到相关文章

最新更新