因此,我正在这个项目中进行工作,我想将音频文件存储在数据库中的LARGEBLOB
中,文件的大小限制为大约10MB,并且能够通过Java加载数据允许播放媒体文件的servlet。
我能够找到的大多数资源都建议将其存储在本地,但是,由于我想在完全不同的位置重建网站,而不必依赖文件夹,因此我想避免使用此解决方案结构相同。
我遇到的问题主要是Web浏览器误解了servlet提供的二进制数据。但是,它设法检索到它是某种音频文件。它无法确定音频文件的类型,这使我相信该servlet没有提供足够的数据,或者我没有做足够的工作来指示Web浏览器如何播放该文件。
例如,如果我有一个文件audio.mp3
,该文件已上载到数据库中的表Tracks
中并存储在列TrackFile
中。假设查询从表中选择正确的歌曲,则servlet需要提供什么数据,以便浏览器在访问servlet时播放文件。当前,当我加载servlet时,浏览器似乎假定类型为audio/mpeg
而不是audio/mp3
。 servlet当前传递的内容也看起来像这样:
response.setHeader("Content-Type", this.getServletContext().getMimeType(t.getTrackName() + '.' + t.getFileType()));
response.setHeader("Content-Length", String.valueOf(t.getTrackData().length));
response.setHeader("Content-Disposition", "inline; filename=\"" + t.getTrackName() + '.' + t.getFileType() + "\"");
response.getOutputStream().write(t.getTrackData());
其中t
是一个对象,其中包含可以从数据库表中检索到的有关特定轨道的所有数据。方法getTrackData()
返回一个byte[]
,其中包含列TrackFile
的内容。此方法的来源是:link,尽管我对其进行了修改以使其能够与音频文件一起使用,但实际上并非如此。
基于我无法获取文件来回放文件的事实,或者说我想实现的目标通常是不可能的,我是否应该抓住任何明显的东西?