2016-10-19 2 views
0

ブロックからS3からファイルを読み込む必要があります。 私は、次のコードを使用しています:S3 client.GetObjectの動作がfileSizeを超えて読み取られる場合

GetObjectRequest request = new GetObjectRequest(bucketName, filePath); 
rangeObjectRequest.setRange(startOffset, startOffset + length - 1); 
S3Object objectPortion = s3Client.getObject(request); 
S3ObjectInputStream stream = objectPortion.getObjectContent(); 
byte[] outputBuffer = ByteStreams.toByteArray(stream); 

は私が与える範囲は、例えばのために、ファイルの境界内にない場合はどうなるのか知りたいです。ファイルサイズが2MBで、取り出す範囲を startOffset = 3MB、長さ= 1MB、 と設定した場合、例外が発生するか、単純に0バイトのストリームが返されますか。

私はこれを自分で確認できたが、現在S3にアクセスできないと理解しています。

答えて

0

基礎となるAPIはエラーを返すので、ErrorCodeInvalidRangeexceptionをスローする必要があります。

66バイトのオブジェクトのバイト80〜90のリクエストに対するAPI自体からの生の応答です。 XMLは読みやすいように書式設定されています。

HTTP/1.1 416 Requested Range Not Satisfiable 
x-amz-request-id: xxx 
x-amz-id-2: xxx 
Content-Type: application/xml 
Transfer-Encoding: chunked 
Date: Wed, 19 Oct 2016 19:44:36 GMT 
Server: AmazonS3 

<?xml version="1.0" encoding="UTF-8"?> 
<Error> 
    <Code>InvalidRange</Code> 
    <Message>The requested range is not satisfiable</Message> 
    <RangeRequested>bytes=80-90</RangeRequested 
    <ActualObjectSize>66</ActualObjectSize> 
    <RequestId>xxx</RequestId> 
    <HostId>xxx</HostId> 
</Error> 
+0

この情報はありがとうございます。 –

関連する問題