2013-09-25 34 views
0

我需要從上傳到控制器的blob中刪除以下標題部分。我嘗試使用GET方法,但無法加載數據。該標題阻止文件正常播放。刪除XMLHttpRequest的標題

------WebKitFormBoundaryRxmjN7irF2fjoibL 
Content-Disposition: form-data; name="that_random_filename.wav"; filename="blob" 
Content-Type: audio/wav 

控制器

 public JsonResult SubmitSound() 
     { 
      var length = Request.ContentLength; 
      var bytes = new byte[length]; 
      Request.InputStream.Read(bytes, 0, length); 

      // Create the new, empty data file. 
      string fileName = AppDomain.CurrentDomain.BaseDirectory + "/Content/Sound/" + Environment.TickCount + ".wav"; 
      FileStream fs = new FileStream(fileName, FileMode.CreateNew); 
      BinaryWriter w = new BinaryWriter(fs); 

      w.Write(bytes); 
      w.Close(); 
      fs.Close(); 
      return new JsonResult() { Data = "Saved successfully" }; 
     } 

編輯

我用recordjs馬特鑽石(demo,只適用於Chrome瀏覽器),庫,錄製語音,將其保存爲一個blob在一個JavaScript變量中。這是一種硬性邏輯,我無法將該blob更改爲文件,主要是因爲它只是內存中的變量。

查看

function doneEncoding(blob) { 
     var xhr = new XMLHttpRequest(); 
     var fd = new FormData(); 
     fd.append("that_random_filename.wav", blob); 
     console.log(fd); 
     xhr.open("POST", "/Home/SubmitSound", true); 
     xhr.send(fd); 
     Recorder.forceDownload(blob, "myRecording" + ((recIndex < 10) ? "0" : "") + recIndex + ".wav"); 
     recIndex++; 
    } 

我可以手動刪除數組的第一個字節的第n個,但它不是我不夠優雅。能否請你幫忙?謝謝

回答

0

如果你從你的表單發佈一個文件,即使它通過AJAX,那麼表單和內容處置也應該保持。你不應該刪除它。在控制器動作接收文件的簡單方法,然後使用

[HttpPost] 
public JsonResult SubmitSound(HttpPostedFileBase file) 

然後在你的控制器方法中做這樣的事情。

MemoryStream fs= new MemoryStream(); 
file.InputStream.CopyTo(fs); 
+0

重點是我沒有上傳文件,而是由JavaScript創建的** blob **。 –

+0

對不起,沒有JavaScript供您參考,表格邊界/內容處置信息說明它是一個文件 - 您是否已經試圖按照我的建議像文件一樣接受它? –

+0

快速更新我的問題 –