Параметр Null при попытке передать blob на контроллер C #

Поэтому я имею в виду сохранение файла WAV, записанного в Chrome на сервер, для сохранения blob на моем сервере. Однако я не могу перевести это предложение PHP на C #.

<?php // get the temporary name that PHP gave to the uploaded file $tmp_filename=$_FILES["that_random_filename.wav"]["tmp_name"]; // rename the temporary file (because PHP deletes the file as soon as it's done with it) rename($tmp_filename,"/tmp/uploaded_audio.wav"); ?> 

Вот что я пробовал до сих пор

Посмотреть

 var fd = new FormData(); fd.append("that_random_filename.wav", blob); xhr.open("POST", "SubmitSound", true); xhr.send(fd); 

Просмотреть модель

 public class SoundBlob { public string key { get; set; } public HttpPostedFileBase blob { get; set; } // I tried byte[] and string too } 

контроллер

  [HttpPost] public ActionResult SubmitSound(SoundBlob blob) { // 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); blob.blob.SaveAs(blob.key); w.Close(); fs.Close(); return new JsonResult() { Data = "Saved successfully" }; } 

Оба key и blob SoundBlob имеют значение null! Как я могу это исправить?

Попробуй это:

Клиент:

 <script src="http://code.jquery.com/jquery-1.10.2.min.js" ></script> <div class='wrapper' > <input type='file' class='target' id='targetinput' /> </div> 

Javascript:

 var xhr = new XMLHttpRequest(); var fd = new FormData(); fd.append("blob.blob", document.getElementById('targetinput').files[0]); xhr.open("POST", "/Home/SubmitSound", true); xhr.send(fd); 

Сервер:

 [HttpPost] public ActionResult SubmitSound(SoundBlob blob) { var fileName = Server.MapPath(string.Format("/Content/Sound/{0}.wav", Environment.TickCount)); blob.blob.SaveAs(fileName); return new JsonResult { Data = "Saved successfully" }; } 

Отлично работает, я просто проверил это

Не полагается на тип C #, скорее, используя этот скрипт.

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