Asp.net mvc 3 使用Windows Phone BackgroundTransfer服务以RESTful方式将文件上载到MVC3站点
我需要我的Windows Phone应用程序能够使用Mango提供的BackgroundTransferService将音频文件上传到我的MVC3站点 作为一种可能的解决方案,我可以:Asp.net mvc 3 使用Windows Phone BackgroundTransfer服务以RESTful方式将文件上载到MVC3站点,asp.net-mvc-3,windows-phone-7,rest,upload,background-transfer,Asp.net Mvc 3,Windows Phone 7,Rest,Upload,Background Transfer,我需要我的Windows Phone应用程序能够使用Mango提供的BackgroundTransferService将音频文件上传到我的MVC3站点 作为一种可能的解决方案,我可以: 将路线映射到我的控制器: public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "SingleAudioFile",
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
}
接收器
操作的音频
字节[]参数
在手机上,数据通过以下方式上传:
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);
我不太确定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
操作参数作为。我不太确定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
操作参数作为。谢谢Darin。今天我将尝试这种方法,如果有效的话,我会回来标记答案。至于BackgroundTransferService,微软已经发布了一个BTS实验室的培训工具包,但是没有提供服务器端的源代码,因此没有进一步的研究就无法了解如何实现服务器处理。谢谢Darin。今天我将尝试这种方法,如果有效的话,我会回来标记答案。至于BackgroundTransferService,微软的人已经在BTS实验室发布了一个培训工具包,但没有提供服务器端的源代码,因此没有进一步的研究就无法了解如何实现服务器处理。