我已经将图像上传到亚马逊云科技 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;