목표 : 서블릿을 빌드하여 브라우저에 http://xxx.com/servpage?a.mp3을 입력하면 즉시이 MP3 파일의 재생을 시작할 수 있습니다. 이전에 파일을 goDaddy에 정적 파일로 저장하면 그 작업을 수행 할 수 있습니다. 내 소프트웨어에서 즉시 재생할 수 있습니다.자바 서블릿을 사용하여 mp3 스트림을 얻는 방법
서블릿을 사용하면 이후에 나오는 내용을 무시할 수 있습니다.이 페이지에서 mp3를 동적으로 반환하기를 원합니다 (앞으로 다른 파일을 반환 할 수 있기 때문에). 내가 가진 것은 오래 기다려서 (> 20 초), 그 플레이어에게 게임을하게했다.
나는 몇 가지 예를 따랐으며 예제에서 "attachment"에 주목했습니다. 그러나, 내가 그것을 제거하면 mp3도 재생되지 않습니다. 나는 Google App Engine을 사용하지만 http 요청을 반환하기 위해 input/outputstream을 사용한다. 누구든지 도울 수 있니?
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException ,IOException {
res.setContentType("audio/mpeg3");
OutputStream os = res.getOutputStream();
res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3";");
res.setContentLength(1000000);
FileService fileService = FileServiceFactory.getFileService();
boolean lockForRead = false;
String filename = "/gs/" + BUCKETNAME + "/" + FILENAME;
AppEngineFile readableFile = new AppEngineFile(filename);
try{
FileReadChannel readChannel = fileService.openReadChannel(readableFile, lockForRead);
InputStream is = Channels.newInputStream(readChannel);
int BUFF_SIZE = 1024;
byte[] buffer = new byte[BUFF_SIZE];
try {
do {
int byteCount = is.read(buffer);
if (byteCount == -1)
break;
os.write(buffer, 0, byteCount);
os.flush();
} while (true);
} catch (Exception excp) {
} finally {
os.close();
is.close();
}
readChannel.close();
} catch(Exception e){
}
}
고마워요, 피터. 서버가 어떤 식 으로든 남용되지 않도록 비밀리에 내 파일에 액세스 할 수있는 java webstart 응용 프로그램을 사용하려고했습니다. 이렇게하려면 사용자의 IP 주소를 기록하고 세션을 시작합니다. 나는 구글 클라우드 스토리지로 리다이렉트 할 수 있다고 생각하지 않는다. 또한 사용자가 JavaWS가 원래 웹 서버가 아닌 파일에 액세스하려고한다는 팝업 창이 뜨면 방해 받기를 원하지 않습니다. doGet이 반환되기 전에 GAE가 아무 것도 보내지 않고 1 분만 처리 할 수 있다는 것을 깨달았습니다. 따라서 파일을 범위로 분할하거나 BLOB를 사용해야 할 수도 있습니다. –
좋은 제안, 피터, 그냥 방울을 시도했다. 파일이 완전히로드되기 전에 blob이 서버를 밀어 넣는 것처럼 파일을 제공 할 수 있습니다. 웹 서버가 다른 스레드를 사용하여 데이터를 푸시하는 것처럼 보일 수도 있으므로 고객이 다운로드하는 동안 음악을 바로 재생할 수 있습니다. 그래서 너는 기본적으로 나의 날을 구했다. 감사! –