2012-01-16 41 views
0

當我使用Request.InputStream在MVC3操作方法中保存動作腳本發送的文件我得到一個損壞的文件。當我使用螢火蟲跟蹤請求時,我意識到內容類型爲「application/x-amf」,並在文件流末尾有文件名。知道我無法更改操作腳本我需要一種方法將文件正確保存到磁盤。asp.net mvc3怎樣接收flash發送的mp3文件(application/x-amf)

+1

AMF!= MP3。您正在收到[序列化的Flash項目](http://en.wikipedia.org/wiki/Action_Message_Format),而不是MP3文件。 – bzlm 2012-01-16 12:04:44

+0

我遇到了fluorfx,但我需要一個示例如何在服務器端使用它來保存發送的文件 – 2012-01-16 14:42:42

回答

0

爲了節省時間,我將字節數組編碼爲base64字符串併發送給服務器。然後在服務器端解碼並保存文件。它現在工作正常。

0

當IVR在POST中發送音頻文件時,您可能可以像我在VoiceModel project中那樣處理它。這裏是控制器中使用的代碼。

[HttpPost] 
    public ActionResult SaveRecording(HttpPostedFileBase CallersMessage) 
    { 
     if (CallersMessage != null && CallersMessage.ContentLength > 0) 
     { 
      // extract only the fielname 
      var fileName = Path.GetFileName(CallersMessage.FileName); 
      // store the file inside ~/App_Data/uploads folder 
      var path = Path.Combine(Server.MapPath(recordingPath), fileName); 
      CallersMessage.SaveAs(path); 
     } 

     string vm_id = Request.QueryString["vm_id"]; 
     string vm_event = Request.QueryString["vm_event"]; 
     string vm_result = ""; 
     return VoiceView(vm_id, vm_event, vm_result); 
    } 

VoiceModel是一個開源項目,您可以在CodePlex下載代碼和示例。 「錄製示例」顯示如何使用此功能。

+0

感謝您的回覆,但是當我將** HttpPostedFileBase **作爲操作方法的參數時,它的計算結果爲空。獲取字節數組的唯一方法是使用** Request.InputStream ** – 2012-01-17 08:38:23

+0

如果您只是使用變量名稱CallersMessage,它將不匹配。變量名稱需要與POST中包含音頻文件的項目名稱相匹配。您可以使用Fiddler [http://www.fiddler2.com/fiddler2/]之類的內容來查看POST消息中發送的Flash。 – 2012-01-17 15:50:22