0
SpringBootでオーディオファイルをより効率的に配信する方法はありますか?Springブートでオーディオファイルを配信する
@RequestMapping(value = '/getSong/{id}', method = RequestMethod.GET)
def getMusic(HttpServletResponse response, @PathVariable Integer id) throws Exception {
Music m = shuffler.findTrackPathById(id)
if (m == null) {
return "File not found"
}
response.setContentType("audio/mpg")
response.setHeader("Content-disposition", "inline; filename=" + m.getFilename())
InputStream is = new FileInputStream(m.getFullpath())
FileCopyUtils.copy(is, response.getOutputStream())
response.getOutputStream().close()
}
私はしばらくの間に一度のこのエラーを経験しています:
2016-06-26 08:47:16.460 INFO 10831 --- [ Thread-11] o.e.jetty.server.handler.ContextHandler : Stopped [email protected]{/,file:/private/var/folders/73/gwl8bs6s4hgcl6vyln6_wzsc0000gn/T/jetty-docbase.7966202443679651433.8080/,UNAVAILABLE}
2016-06-26 08:47:46.463 WARN 10831 --- [ Thread-11] o.e.jetty.util.thread.QueuedThreadPool : qtp1041326823{STOPPING,8<=8<=200,i=0,q=1} Couldn't stop Thread[qtp1041326823-19,5,main]
角度アプリから作られたHTTPリクエストが即座にファイルをダウンロードしません(速度は〜に200 Kb/sです) - ローカルマシンでテストしています。ただし、カールを使用するか、アドレスバーからダウンロードすると、すぐにダウンロードされます。
最後の段落は、それがクライアント側の問題であることを証明していますが、それはサーバー側の問題だと思われます。 – kryger
ええ、サーバーを終了すると、「スレッドを停止できませんでした」という警告が表示されます。私は、アクティビティモニタで、1つのJavaプロセスがハングしていることがわかります。これは手動で強制終了する必要があります。 – maslick
@krygerフロントエンドでngAudioを使用しています。これはうまく動作します。http://danielstern.github.io/ngAudio/#/docs - これにより、読み込みが遅くなる場合があります。しかし、なぜSpringは「スレッドを止められないだろう?とにかくそれはサーバー側の問題だと私は思う。私が間違って見たことの1つは、サーバがファイルを提供する前にクライアントが切断された場合です。 – maslick