我需要从Amazon s3存储桶下载(或可能传输)一首歌曲。问题是,如果歌曲长达270秒,我想在150秒内开始下载/流,然后从那里播放。
如何使用Amazon s3 Web服务和Java EE servlet技术来实现这一目标?
答案 0 :(得分:1)
使用AWS Java SDK,您应该使用AmazonS3Client,并使用getObject的实例在其上调用GetObjectRequest。创建请求时,请使用要获取的字节范围调用setRange。这将让您获得文件的一部分而无需下载整个文件。 getObject()
返回一个S3Object,您可以使用它将文件内容流式传输到音乐播放器或本地文件或任何您想要的内容。
有两个棘手的部分:
一个棘手的部分是你可能也需要歌曲的标题字节。例如。如果文件是MP3格式,则需要MP3 header。您可以使用上面相同的方法来获取标头的字节范围。
另一个棘手的部分是如何确定文件中的字节偏移量,从歌曲的几秒钟开始。有关这方面的信息,请参阅this question。您可以通过以字节为单位获取整个文件大小(参见getObjectMetadata),除以歌曲的总长度(以秒为单位),然后乘以抵消下载的秒数,即可轻松估算字节偏移量。