从Amazon s3流式传输文件,在C#中具有查找的可能性

问题描述 投票:1回答:2

我需要使用Amazon S3中的大文件。 如何从S3中获取大文件的一部分?最好的方法是获取可能的流。不幸的是,CanSeekresponse.ResponseStream属性为false:

GetObjectRequest request = new GetObjectRequest();
request.BucketName = BUCKET_NAME;
request.Key = NumIdToAmazonKey(numID);
GetObjectResponse response = client.GetObject(request);
c# amazon-s3 stream seek
2个回答
1
投票

您可以按照以下步骤阅读文件的特定部分

GetObjectRequest request = new GetObjectRequest 
{
    BucketName = bucketName,
    Key = keyName,
    ByteRange = new ByteRange(0, 10)
};

请参见documentation


0
投票

我知道这不是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!
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.