Загрузка файлов с помощью службы PounderTransfer Windows Phone на сайт MVC3

StackOverflow https://stackoverflow.com/questions/8803607

Вопрос

Мне нужно, чтобы мое приложение Windows Phone было возможность загружать аудиофайлы на мой сайт MVC3, используя BackgroundTransFerService, доступный в Mango.

Как одно из возможных решений, я могу:

  1. Карту маршрута к моему контроллеру:

    public override void RegisterArea(AreaRegistrationContext context)
            {
                context.MapRoute(
                    "SingleAudioFile",
                    "Api/Audio/Recieve",
                    new { controller = "AudioFiles", action = "Recieve" }
                    );
            }
    
  2. В контроллере предпринимайте действие

    [HttpPost]    
    public JsonResult Recieve(byte[] audio)
         {
             // saving and status report logic here
         }
    

Мой вопрос: Как мне настроить систему для привязки файла, который я загружаю с Windows Phone на Recieve действие audio байт [] параметр?

На телефоне данные загружаются следующим образом:

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);
Это было полезно?

Решение

Я не совсем уверен, какой протокол выполняет использование фонового перерыва для отправки файла, но если он записывает буфер непосредственно в тело запроса POST, вы можете использовать пользовательскую модель связующего для чтения непосредственно из потока запросов:

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();
        }
    }
}

который может быть зарегистрирован так:

[HttpPost]
public ActionResult Receive([ModelBinder(typeof(BTModelBinder))] byte[] audio)
{
    ...
}

Если он использует multipart/form-data тогда вы можете использовать стандарт HttpPostedFileBase параметр действия как Показано здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top