WindowsPhone BackgroundTransferサービスを使用してファイルをMVC3サイトにアップロードする

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

質問

マンゴーで利用可能なBackgroundTransferServiceを使用して、オーディオファイルをMVC3サイトにアップロードできるようにWindows Phoneアプリケーションが必要です。

1つの可能な解決策として、私はできます:

  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 アクションパラメーターAS ここに示されています.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top