2016-06-27 3 views
0

스프링 부트로 오디오 파일을보다 효율적으로 제공하는 방법이 있습니까?스프링 부트로 오디오 파일 제공

@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 요청은 (속도는 200KB/s의 ~입니다) - 내 로컬 컴퓨터에서 테스트 중이지만. 그러나 말장난을 사용하거나 검색 주소창에서 다운로드하면 즉시 다운로드됩니다.

+0

마지막 단락은 이것이 클라이언트 측 문제라는 것을 거의 증명하지만 아직 서버 측 문제라고 생각하는 것 같습니다. – kryger

+0

예, 서버를 종료 할 때 "스레드를 중지 할 수 없습니다."라는 경고가 표시됩니다. 하나의 자바 프로세스가 매달려 있다는 것을 Activity 모니터에서 볼 수 있는데, 수동으로 죽여야 만합니다. – maslick

+0

@kryger 프론트 엔드에서 ngAudio를 사용하고 있습니다. http://danielstern.github.io/ngAudio/#/docs에서 정상적으로 작동합니다. 이로 인해로드가 느려질 수 있습니다. 그런데 왜 스프링은''스레드를 멈출 수 없습니까? ' 어쨌든 그것은 서버 측 문제라고 생각합니다. 내가 간과 한 한가지, 서버가 파일을 제공하기 전에 클라이언트의 연결이 끊어지면 어떻게해야합니까? – maslick

답변

0

문제는 다른 리소스 (GET, POST)와 동일한 스레드에서 오디오 파일을 제공한다는 것입니다.

관련 문제