繁体   English   中英

找出InputStream的大小

[英]Figuring out the size of an InputStream

我目前正在使用Amazon的S3存储获得输入流,如下所示:

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

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

我如何弄清楚该流的长度? 以前,我这样做:

Long length = Files.size(filepath); 

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

您无法获得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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM