弄清楚InputStream的大小

时间:2016-11-24 18:10:07

标签: java amazon-s3

我目前正在使用亚马逊的S3存储获取输入流,如下所示:

public static InputStream getResourceAsStream(String fileKey) {
    AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
    return s3Client.getObject(new GetObjectRequest(bucketName, fileKey)).getObjectContent();
}

我处理的文件是.mp4视频。我尝试使用Range-Requests流式传输视频,以便为最终用户进行快速转发和倒带。当我使用常规File对象时,我的流媒体工作正常,但现在我从Amazon S3接收流而不是使用保存在本地计算机上的文件。

如何判断此流的长度?之前,我这样做了:

Long length = Files.size(filepath); 

但现在这不起作用,因为我没有直接在运行Java代码的机器上保存文件。有没有办法弄清楚InputStream的长度?

1 个答案:

答案 0 :(得分:1)

除非你从头到尾读取它并计算你自己读过的字节数,否则你无法获得InputStream的长度。

您可以获得S3Object的长度:

public static InputStream getResourceAsStream(String fileKey) {
    AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
    S3Object obj = s3Client.getObject(new GetObjectRequest(bucketName, fileKey));
    long length = obj.getObjectMetadata().getInstanceLength();
    //use length
    return obj.getObjectContent();
}