Загрузка файлов с помощью службы PounderTransfer Windows Phone на сайт MVC3
-
26-10-2019 - |
Вопрос
Мне нужно, чтобы мое приложение Windows Phone было возможность загружать аудиофайлы на мой сайт MVC3, используя BackgroundTransFerService, доступный в Mango.
Как одно из возможных решений, я могу:
Карту маршрута к моему контроллеру:
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "SingleAudioFile", "Api/Audio/Recieve", new { controller = "AudioFiles", action = "Recieve" } ); }
В контроллере предпринимайте действие
[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
параметр действия как Показано здесь.