Hochladen von Dateien mit dem Windows Phone BackgroundTransfer service zu einem MVC3-Website in einer ruhigen Art und Weise

StackOverflow https://stackoverflow.com/questions/8803607

Frage

Ich brauche meine Windows Phone-Anwendung in der Lage sein, den upload von audio-Dateien auf meinem MVC3-Website, mit den BackgroundTransferService erhältlich in Mango.

Als eine mögliche Lösung, kann ich:

  1. Karte eine route zu meinem controller:

    public override void RegisterArea(AreaRegistrationContext context)
            {
                context.MapRoute(
                    "SingleAudioFile",
                    "Api/Audio/Recieve",
                    new { controller = "AudioFiles", action = "Recieve" }
                    );
            }
    
  2. Im controller eine Aktion Erhalten

    [HttpPost]    
    public JsonResult Recieve(byte[] audio)
         {
             // saving and status report logic here
         }
    

Meine Frage ist:Wie tun ich set die system zu binden Datei, die ich hochladen von Windows Phone auf ein Recieve Aktion audio byte[] parameter?

Auf dem Mobiltelefon, die die Daten hochgeladen werden auf folgende Weise:

BackgroundTransferRequest btr = new BackgroundTransferRequest (new Uri
                 (siteUrl + "Api/Audio/Recieve",UriKind.Absolute));
    btr.TransferPreferences = TransferPreferences.AllowBattery;
    btr.Method = "POST";
    btr.UploadLocation = new Uri("/" + Transfers + "/" + isoAudioFileName, UriKind.Relative);
Microsoft.Phone.BackgroundTransfer.BackgroundTransferService.Add(btr);
War es hilfreich?

Lösung

Ich bin nicht ganz sicher, welches Protokoll verwendet die BackgroundTransfer verwenden, um die Datei zu senden, aber wenn Sie schreibt den Puffer direkt auf den Körper des POST-Anfrage können Sie ein benutzerdefiniertes Modell-Mappe, um zu Lesen, direkt aus dem Antrag stream:

public class BTModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        using (var ms = new MemoryStream())
        {
            controllerContext.HttpContext.Request.InputStream.CopyTo(ms);
            return ms.GetBuffer();
        }
    }
}

die eingetragen werden konnte, etwa so:

[HttpPost]
public ActionResult Receive([ModelBinder(typeof(BTModelBinder))] byte[] audio)
{
    ...
}

Wenn es verwendet multipart/form-data dann können Sie mit einem standard - HttpPostedFileBase action-parameter als hier gezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top