2012-03-26 12 views
1

ブラウザ側でサウンドスニペットをhttps://code.google.com/p/wami-recorder/で録音しようとしていますが、wamiの例とサーバー側のコントローラメソッド。私はこの問題を解決するにはどうすればよい再生!フレームワーク[1.2.4] - wami-recorderを使用してaudio/xwav Content-Typeを受け入れる

public static void addNewRecording() { 
     if (request.method.equals(Constants.METH_POST)) { 
      try { 
       InputStream inputStream = request.body; 
       Map<String, Header> headerMap = request.headers; 
       for (Entry<String, Header> entry : headerMap.entrySet()) { 
        Logger.info("Head: " + entry.getKey() + " name; " 
         + entry.getValue().name + " val: " + entry.getValue().value()); 
       } 

       OutputStream out = new FileOutputStream(new File(
        "/Users/franklovecchio/Desktop/file.mp3")); 

       int read = 0; 
       byte[] bytes = new byte[1024]; 

          /* ERROR ON LINE BELOW */ 
       while ((read = inputStream.read(bytes)) != -1) { 
        out.write(bytes, 0, read); 
       } 

       inputStream.close(); 
       out.flush(); 
       out.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      for (Entry<String, String> params : request.params.allSimple().entrySet()) { 
       Logger.info("k: " + params.getKey() + "v: " + params.getValue()); 
      } 
      renderCustomMessage("Created new recording.", "Success."); 
     } 
    } 

ルートPOST /uploadため

java.io.IOException: Bad file descriptor 
    at java.io.FileInputStream.readBytes(Native Method) 
    at java.io.FileInputStream.read(FileInputStream.java:198) 
    at controllers.APIVoicemailController.addNewRecording(APIVoicemailController.java:56) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) 
    at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:256) 
    at play.Invoker$Invocation.run(Invoker.java:276) 
    at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:234) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 

コントローラ方法:何らかの理由で、request.bodyInputStreamはこのエラーを投げていますか?

答えて

0

私は次のように正確に従わ同じlately.Theのステップがある行っている:

がからポストのURLを2.Changed record.phpために掲示されたWAMIのためのサンプルコードを1.Pickedをレコード内の私のコントローラーに対応するURLへのrecord.php

3.コントローラーの内側に、ヘッダーをチェックせずに受信したデータを保存しました(おそらくこれはあなたのコードで見た違いです)。 Firebugを使用すると、リクエストの種類(オーディオかどうか)を確認するのに役立ちます。

データはリクエスト本体に含まれ、入力ストリームとして読み込まれ、mp3に書き込まれます私。

1

私はPlay 2を使用していますが、ヘッダをチェックせずにInputStreamのコンテンツを取得しただけであれば、問題なくWAVファイルまたはDBに保存できます。

関連する問題