我目前正在使用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();
}
关于java - 找出InputStream的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40792528/