Caricamento di file con il servizio Windows Phone BackgroundTransfer a un sito MVC3 in modo RESTful
-
26-10-2019 - |
Domanda
Ho bisogno della mia applicazione Windows Phone per essere in grado di caricare i file audio al mio sito MVC3, utilizzando il BackgroundTransferService disponibili a Mango.
Come una possibile soluzione, posso:
-
Map un percorso per il mio controller:
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "SingleAudioFile", "Api/Audio/Recieve", new { controller = "AudioFiles", action = "Recieve" } ); }
-
Nel controllore, hanno un'azione Recieve
[HttpPost] public JsonResult Recieve(byte[] audio) { // saving and status report logic here }
La mia domanda è : Come faccio a impostare il sistema per bind upload di file mi da Windows Phone al byte Recieve
di un'azione audio
[parametri]?
Al telefono, i dati sia caricato seguente modo:
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);
Soluzione
Non sono del tutto sicuro di quello che il protocollo fa l'uso BackgroundTransfer per inviare il file, ma se si scrive il buffer direttamente al corpo del POST richiesta è possibile utilizzare un modello personalizzato legante per leggere direttamente dal flusso di richiesta:
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();
}
}
}
che potrebbe essere registrato in questo modo:
[HttpPost]
public ActionResult Receive([ModelBinder(typeof(BTModelBinder))] byte[] audio)
{
...
}
Se si utilizza multipart/form-data
allora si potrebbe utilizzare un parametro azione HttpPostedFileBase
standard mostrato qui .