2

Mango で利用できる BackgroundTransferService を使用して、Windows Phone アプリケーションで音声ファイルを MVC3 サイトにアップロードできるようにする必要があります。

考えられる解決策の 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
         }
    

私の質問はRecieve: Windows Phone からアップロードしたファイルをアクションのaudiobyte[] パラメータにバインドするようにシステムを設定するにはどうすればよいですか?

電話では、データは次の方法でアップロードされています。

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

1 に答える 1

0

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アクション パラメータを使用できます。

于 2012-01-10T13:46:40.270 に答える