我需要使用Amazon S3中的大文件。 如何从S3中获取大文件的一部分?最好的方法是获取可能的流。不幸的是,CanSeek
的response.ResponseStream
属性为false:
GetObjectRequest request = new GetObjectRequest();
request.BucketName = BUCKET_NAME;
request.Key = NumIdToAmazonKey(numID);
GetObjectResponse response = client.GetObject(request);
您可以按照以下步骤阅读文件的特定部分
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName,
ByteRange = new ByteRange(0, 10)
};
我知道这不是OP所要的,但是我需要一个可搜索的s3流,因此我可以读取Parquet文件而无需下载它们,因此我在这里进行了介绍:https://github.com/mukunku/RandomHelpers/blob/master/SeekableS3Stream.cs
性能并不像我预期的那么差。您可以使用TimeWastedSeeking属性,通过在s3流上允许Seek()来查看浪费了多少时间。
这里有一个使用方法的例子:
using (var client = new AmazonS3Client(credentials, Amazon.RegionEndpoint.USEast1))
{
using (var stream = SeekableS3Stream.OpenFile(client, "myBucket", "path/to/myfile.txt", true))
{
//stream is seekable!
}
}