2016-06-27 4 views
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です) - ローカルマシンでテストしています。ただし、カールを使用するか、アドレスバーからダウンロードすると、すぐにダウンロードされます。

+0

最後の段落は、それがクライアント側の問題であることを証明していますが、それはサーバー側の問題だと思われます。 – kryger

+0

ええ、サーバーを終了すると、「スレッドを停止できませんでした」という警告が表示されます。私は、アクティビティモニタで、1つのJavaプロセスがハングしていることがわかります。これは手動で強制終了する必要があります。 – maslick

+0

@krygerフロントエンドでngAudioを使用しています。これはうまく動作します。http://danielstern.github.io/ngAudio/#/docs - これにより、読み込みが遅くなる場合があります。しかし、なぜSpringは「スレッドを止められないだろう?とにかくそれはサーバー側の問題だと私は思う。私が間違って見たことの1つは、サーバがファイルを提供する前にクライアントが切断された場合です。 – maslick

答えて

0

問題は、他のリソース(GET、POST)と同じスレッドでオーディオファイルを提供していることです。

関連する問題