2015-01-20 7 views
5

Ich brauche einen Diktierrecorder in einem Projekt, an dem ich arbeite, und auch die aufgenommenen Stimmen müssen später angehört werden. Das Projekt von C# und asp.net mvc entwickelt.Diktiergerät, Blobdatei auf Server speichern - C#, Mvc

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

ich in diesem Kreis über ein Aufzeichnungssystem verwenden. Wenn Sie auf Herunterladen klicken, erhalten Sie ein Datei-WAV-Format. Es wird auf Ihren Computer heruntergeladen, aber ich möchte es auf dem Server speichern.

Die Quellcodes dieses Projekts sind unterhalb des Links verfügbar.

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

ich untersuchen jquery Codes: Wenn Sie auf Download klicken

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

Es wird in dieser Funktion arbeiten. URL parametre in Funktion reagieren Sie auf diesen Link als

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

Wenn Sie gehen, dass adres in Spieler WAV-Datei funktioniert, aber src in Spieler hat stil diesen Code below

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

Frage:

Wie kann ich eine Sounddatei auf dem Server speichern? Ich kann keine Lösung von den Fragen auf dieser Website und im Allgemeinen im Internet erreichen :)

1 - Welche Parameter muss ich an den Controller mit Jquery Ajax senden?

2 - Wie konvertiert man diesen Parameter in WAV oder MP3-Format in der Controller-Seite?

Vielen yo so viel von jetzt :)

Antwort

3

Ich ging mit recorder.js, weil ich die individuell gestaltet werden wollte - ich brauchte nur Rückrufe ich mit meiner eigenen UI verwenden können.

mit der Post zu starten, hier ist der entsprechende Code JavaScript:

Recorder.js Funktion

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

Auf der Server-Seite lädt, ist es ziemlich einfach ist. Sie nehmen eine normale Controller-Aktion mit einem HttpPostedFileBase-Parameter, um mit der Dateieingabe zu gehen. Eine andere Möglichkeit ist die Verwendung von Request.Files. In meinem Fall habe ich jedoch ein Datenmodell verwendet, um die Eingabe zu erhalten.

VoicePassage Klasse

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

Die abgespeckte Version, wie die Datei zu speichern. Dieser ist wirklich verdummt. Sie sollten Eingaben mit standardmäßigen oder benutzerdefinierten ValidateAttribute/s in Ihren Datenmodellen validieren. Es sollte auch irgendwo im Datenmodell ein benutzerdefiniertes Attribut [MimeType ("audio/wav")] vorhanden sein.

abgespeckte Version, wie die Datei

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

Die Recorder.upload() Funktion gibt einen AJAX-Request an den Server zu speichern, so macht es Sinn, einen JsonResult eher als eine Action zurückzukehren. Zurück auf der Client-Seite können Sie das Ergebnis einfach verarbeiten und Maßnahmen ergreifen, z. B. an eine Liste anhängen oder einen Fehler anzeigen.