【发布时间】:2012-02-27 05:16:46
【问题描述】:
目标:构建一个servlet,当我在浏览器中输入http://xxx.com/servpage?a.mp3时,我可以立即开始播放这个mp3文件。以前如果我将文件作为静态文件放在 goDaddy 上,我可以这样做。我的软件可以立即播放。
使用 Servlet,我可以忽略 ? 之后的内容,只希望此页面动态返回 mp3(因为将来我可能会返回任何其他文件)。我得到的是漫长的等待(>20 秒),然后让玩家播放它。
我遵循了一些示例,并注意到示例中的“附件”。但是,如果我将其删除,则 mp3 将无法播放。我虽然使用 Google App Engine,但只使用输入/输出流来返回 http 请求。有人可以帮忙吗?
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){
}
}
【问题讨论】:
标签: google-app-engine servlets mp3