Hochladen von Dateien mit dem Windows Phone BackgroundTransfer service zu einem MVC3-Website in einer ruhigen Art und Weise
-
26-10-2019 - |
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:
Karte eine route zu meinem controller:
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "SingleAudioFile", "Api/Audio/Recieve", new { controller = "AudioFiles", action = "Recieve" } ); }
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);
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.