Загрузка файлов с помощью службы Windows Phone BackgroundTransfer на сайт MVC3 в режиме RESTful - PullRequest
2 голосов
/ 10 января 2012

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

В качестве одного из возможных решений я могу:

  1. Отобразить маршрут к моему контроллеру:

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

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

У меня вопрос : Как настроить систему для привязки файла, загружаемого с Windows Phone, к параметру audio *1020* byte [] действия?

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

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

1 Ответ

0 голосов
/ 10 января 2012

Я не совсем уверен, какой протокол использует BackgroundTransfer для отправки файла, но если он записывает буфер непосредственно в тело запроса 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 как , показанный здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...