0

コントローラーにアップロードされた BLOB から次のヘッダー部分を削除する必要があります。メソッドを使用してみましたGETが、データをロードできません。このヘッダーにより、ファイルが正しく再生されなくなります。

------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" };
        }

編集

recordjsMatt Diamond ( demo 、Chrome でのみ動作)を使用します。これは、音声を録音し、JavaScript 変数にブロブとして保存するライブラリです。これは、基本的にメモリ内の単なる変数であるため、そのブロブをファイルに変更できないという難しいロジックです。

意見

    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 番目のバイトを手動で削除することはできますが、それは私にとって十分に洗練されたものではありません。助けていただけますか?ありがとう

4

1 に答える 1

0

フォームからファイルを投稿する場合は、たとえそれが AJAX 経由であっても、フォームとコンテンツの配置を実際に維持する必要があります。削除しないでください。コントローラ アクションでファイルを受け取る簡単な方法は、

[HttpPost]
public JsonResult SubmitSound(HttpPostedFileBase file)

次に、コントローラーメソッドでこのようなことを行います。

MemoryStream fs= new MemoryStream();
file.InputStream.CopyTo(fs);
于 2013-09-25T06:15:54.747 に答える