c# - 录音机,将 Blob 文件保存到服务器 - C#,Mvc

标签 c# jquery asp.net-mvc audio blob

我正在做的项目中需要一个录音机,而且录制的声音必须稍后再听。 该项目由 c# 和 asp.net mvc 开发。

http://demos.subinsb.com/jquery/voice/

我在上面的链接中使用了记录器系统。当您单击“下载”时,它会为您提供一个 .wav 格式的文件。 它已下载到您的计算机,但我想将其保存到服务器。

此项目的源代码可在链接下方找到。

http://demos.subinsb.com/down.php?id=s/rvx90xq1xtpak3xc647n&class=31

我研究了 jquery 代码: 当您点击下载

 $(document).on("click", "#download:not(.disabled)", function () {
            $.voice.export(function (url) {
                $("<a href='" + url + "'download='MyRecording.wav'></a>")[0].click();
            }, "URL");
            restore(); });

它正在这个函数中工作。函数中的 URL 参数将链接响应为

blob:http%3A//localhost%3A1875/146432b2-8b1b-4eef-8d77-1fdbc8fc74c9

当你去的时候,播放器 wav 文件中的 adres 正在工作,但播放器中的 src 仍然有下面的代码

blob:http%3A//localhost%3A1875/146432b2-8b1b-4eef-8d77-1fdbc8fc74c9

问题:

如何将声音文件保存到服务器。我无法从本网站和互联网上的问题中找到任何解决方案 :)

1 – 我必须使用 Jquery Ajax 将哪个参数发送到 Controller ?

2 – 如何在 Controller 端将该参数转换为 wav 或 mp3 格式?

从现在开始非常感谢你:)

最佳答案

我选择 recorder.js 是因为我想要自定义 — 我只需要可以与我自己的 UI 一起使用的回调。

首先,这里是相关的 JavaScript 代码:

Recorder.js上传功能

doUpload: function(title, filename) {
    Recorder.upload({
        method: "POST",
        url: "@Url.Action("Upload", "Recordings")",
        audioParam: "Recording", // Name for the audio data parameter
        params: {
            // Additional parameters need to be an object
            "Title": title,
            "FileName": filename
        },
        success: function(response) {
            console.log(response);
        }
    });
}

在服务器端,这很简单。您使用 HttpPostedFileBase 参数执行正常的 Controller 操作以处理文件输入。另一种方法是使用 Request.Files。但是,就我而言,我使用数据模型来接收输入。

语音 channel 类

public class VoicePassage
{
    public string Title { get; set; }
    public string FileName { get; set; }
    public HttpPostedFileBase Recording { get; set; }
}

如何保存文件的简化版本。这个真的是脑残了。您应该在数据模型上使用标准或自定义 ValidateAttribute/s 来验证输入。数据模型中的某处也应该有一个自定义 [MimeType("audio/wav")] 属性。

如何保存文件的简化版

public JsonResult Upload(VoicePassage passage)
{
    // Validate the input
    // ...
    // ...

    // Save the file
    string path = Server.MapPath(string.Format("~/Recordings/{0}.wav", passage.FileName));
    passage.Recording.SaveAs(path);

    return Json(new { Success: true });
}

Recorder.upload() 函数向服务器发出 AJAX 请求,因此返回 JsonResult 而不是 ActionResult 是有意义的。回到客户端,您可以简单地处理结果并采取行动,例如将其附加到列表或显示错误。

关于c# - 录音机,将 Blob 文件保存到服务器 - C#,Mvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28040823/

相关文章:

javascript - jQuery .each() 函数通过索引访问其他选择器

asp.net-mvc - 未找到 Nancy Razor Viewengine

c# - ASP.NET MVC 中类似 ListView 的实现

c# - 从 Azure Function 中读取日志

javascript - 如何在 materialize CSS 中控制自动打开 Datepicker?

javascript - 常量脚本 -> 更改 src iframe (1min, 5min) + jQuery

asp.net-mvc - 如果经过身份验证,MVC 中的默认页面会有所不同

asp.net-mvc - Kendo DateTimePicker 没有发布 asp.net MVC

c# - if else 语句简化以提高可读性

c# - 如何将依赖项注入(inject) Caliburn.Micro 中的 View 模型?