有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaS3客户端。读取超过文件大小时的GetObject行为

我需要以块的形式从S3读取一个文件。 我正在使用以下代码:

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,并且我将要获取的范围设置为 STARTOFSET=3MB,长度=1MB 我会得到一个异常,还是只返回一个0字节的流

我知道我可以自己检查,但我目前没有访问S3的权限


共 (1) 个答案

  1. # 1 楼答案

    底层API返回一个错误,因此库应该抛出一个exception和一个ErrorCodeInvalidRange

    下面是API本身对66字节对象的80-90字节请求的原始响应。为可读性而格式化的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>