Цель: создать сервлет, чтобы при наборе в браузере http://xxx.com/servpage?a.mp3 я мог сразу же начать воспроизведение этого mp3-файла. Ранее, если я помещаю файл в goDaddy как статический файл, я могу это сделать. Мое программное обеспечение может играть прямо сейчас.
Используя сервлет, я могу игнорировать, что после ?, просто хочу, чтобы эта страница динамически возвращала 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){
}
}