Carga de archivos con el servicio Windows Phone BackgroundTransfer a un sitio MVC3 de manera reputante
-
26-10-2019 - |
Pregunta
Necesito que mi aplicación de Windows Phone pueda cargar archivos de audio en mi sitio MVC3, utilizando el servicio de servicios de fondo disponible en Mango.
Como una posible solución, puedo:
Asigna una ruta a mi controlador:
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "SingleAudioFile", "Api/Audio/Recieve", new { controller = "AudioFiles", action = "Recieve" } ); }
En el controlador, tenga una acción de recibir
[HttpPost] public JsonResult Recieve(byte[] audio) { // saving and status report logic here }
Mi pregunta es: ¿Cómo configure el sistema para vincular el archivo que subo desde Windows Phone a un Recieve
comportamiento audio
Byte [] Parámetro?
En el teléfono, los datos se están cargando de la siguiente manera:
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);
Solución
No estoy muy seguro de qué protocolo utiliza el trasfondo para enviar el archivo, pero si escribe el búfer directamente al cuerpo de la solicitud de publicación, podría usar una carpeta de modelo personalizada para leer directamente desde la secuencia de solicitudes:
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();
}
}
}
que podría registrarse así:
[HttpPost]
public ActionResult Receive([ModelBinder(typeof(BTModelBinder))] byte[] audio)
{
...
}
Si usa multipart/form-data
Entonces podrías usar un estándar HttpPostedFileBase
Parámetro de acción como se muestra aquí.