WindowsPhone BackgroundTransferサービスを使用してファイルをMVC3サイトにアップロードする
-
26-10-2019 - |
質問
マンゴーで利用可能なBackgroundTransferServiceを使用して、オーディオファイルをMVC3サイトにアップロードできるようにWindows Phoneアプリケーションが必要です。
1つの可能な解決策として、私はできます:
私のコントローラーへのルートをマップします:
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
アクションパラメーターAS ここに示されています.
所属していません StackOverflow