1

サーバーにaviファイルをアップロードしようとしています。HttpRequest では正常に動作しますが、アプリを一時停止してもアップロードを続行する必要があるため、BackgroundUploader を使用しようとしています。msdn http://msdn.microsoft.com/en-us/library/windows/apps/jj152727.aspxでこのガイドラインに従っています。したがって、私のコードは次のようになります。

StorageFile storageFile = KnownFolders.VideosLibrary.GetFileAsync("fileName");
BackgroundUploader uploader = new BackgroundUploader();
uploader.Method = "POST";
uploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
var fs = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
IInputStream aaaa = fs.GetInputStreamAt(0);

UploadOperation upload = uploader.CreateUploadFromStreamAsync(new Uri("uploadUri"), aaaa);

await HandleUploadAsync(upload, true);

残りは MSDN と同じです。そして、オンラインのメソッドHandleUploadAsyncでサポートされていないメディアタイプ(415)の例外が発生しています

await upload.StartAsync().AsTask(cts.Token, progressCallback);

私は何を間違っていますか?または、この種の例外の原因は何ですか?

編集:ここと私の答えにコメントしたので、問題を解決しました。最後に、基本的には、認識され、必要に応じて解釈されるデータをサーバーに送信しているだけだと思います。したがって、BackgroundUploader を使用する場合、ファイルをアップロードするだけでなく、それをどのように行っているかについての情報も送信しています (回答で述べたように)。したがって、同じ考えで、フォルダーをサーバーにアップロードすることもできます。そのため、実際のコンテンツは送信せず、その方法についての説明のみを送信します。そして、私が HttpRequest と BackgroundUploader によって行っているリクエストを比較すると、それらは等しく、それが私が望んでいたものです。

4

1 に答える 1

0

したがって、問題の部分はリクエストのヘッダーでした。サーバーによって認識されるヘッダーがリクエストに含まれており、SetRequestheader メソッドを介して BackgroundUploader に配置しようとしましたが、機能しませんでした。Kieqic が提案したように、私は Fiddler を使用し、それによって HttpRequest と BackgroundUploader によって行われたリクエストを比較します。全く違うことがわかりました。したがって、SetRequestheader を使用して、予期される Content-Type のようないくつかの部分を追加し、ヘッダーの残りの部分を等しくするために、ファイルのコンテンツの前にバイト配列として追加します。そして、これはうまくいくので、私の場合、Fiddlerを使用してリクエストヘッダーを作成するのに役立ちました。

于 2013-10-22T06:54:38.430 に答える