Поэтому я имею в виду сохранение файла 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);