目的:ブラウザにhttp://xxx.com/servpage?a.mp3と入力すると、即座にこのmp3ファイルの再生を開始できるようにサーブレットを作成します。以前はファイルを静的なファイルとしてgoDaddyに置くと、私はそれを行うことができます。私のソフトウェアはすぐにそれを再生することができます。Javaを使用してmp3ストリームを実現する方法Servlet
サーブレットを使用すると、後で何を無視できるのですか?このページでmp3を動的に返すようにします(将来は他のファイルを返す可能性があるため)。私が得たものは長い待ち時間(> 20秒)であり、プレイヤーにそれをプレイさせた。
私はいくつかの例に従い、この例では「attachment」に気づいた。しかし、それを削除すると、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){
}
}
ありがとう、ピーター。私はサーバーがどんな方法で悪用されることもないように、私のファイルに密かにアクセスするためのJava Web Startアプリケーションを用意しようとしていました。これを行うために、私はユーザーのIPアドレスを記録し、セッションを開始します。私はちょうどGoogleの雲のストレージにリダイレクトはそれを行うことができるとは思わない。また、私は、JavaWSが元のWebサーバーからではなくファイルにアクセスしようとしていることを示すJavaポップアップウィンドウで、ユーザーに迷惑をかけたくない。私はdoGetが返る前にGAEが何も送っていないことに気付き、1分または処理のみを許可します。したがって、ファイルを範囲に分割するか、BLOBを使用する必要があります。 –
良い提案、ピーター、ちょうどブロブを試みました。ファイルが完全にロードされる前に、サーバがプッシュしているかのように、blobがファイルを提供できるように見えます。 Webサーバーが別のスレッドを使用してデータをプッシュしているように見えますので、クライアントはすぐにダウンロードしながら音楽を再生できます。あなたは基本的に私の一日を救った。感謝! –