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:

  1. Map un percorso per il mio controller:

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

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top