删除 XMLHttpRequest 的标头

本文关键字:XMLHttpRequest 删除 | 更新日期: 2023-09-27 18:32:37

我需要从上传到控制器的 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" };
        }

编辑

我使用Matt Diamond的recordjs(演示,仅适用于Chrome),这是一个记录语音的库,将其保存为javascript变量中的blob。这是一种硬逻辑,我无法将该 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 个字节,但这对我来说不够优雅。你能帮忙吗?谢谢

删除 XMLHttpRequest 的标头

如果您从表单发布文件,即使它通过 AJAX,那么表单和内容配置确实应该保留。您不应删除它。在控制器操作中接收文件的简单方法,然后使用

[HttpPost]
public JsonResult SubmitSound(HttpPostedFileBase file)

然后在控制器方法中执行类似操作。

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