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:

  1. Asigna una ruta a mi controlador:

    public override void RegisterArea(AreaRegistrationContext context)
            {
                context.MapRoute(
                    "SingleAudioFile",
                    "Api/Audio/Recieve",
                    new { controller = "AudioFiles", action = "Recieve" }
                    );
            }
    
  2. 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);
¿Fue útil?

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top