0

Windows 8.1 でBackgroundUploaderを介してMultipart/related Content-Type を使用してファイルをアップロードしたい

私のコードは次のとおりです

BackgroundUploader uploader = new BackgroundUploader();
uploader.SetRequestHeader("Content-Type", "multipart/related; boundary=foo_bar_baz");
uploader.Method = "POST";

// Create upload content
List<BackgroundTransferContentPart> parts = new List<BackgroundTransferContentPart>();

// File metadata
var part = new BackgroundTransferContentPart();
part.SetHeader("Content-Type", "text/plain");
part.SetText(file.DisplayName);
parts.Add(part);

// File
// Here file is of type StorageFile
part = new BackgroundTransferContentPart();
part.SetHeader("Content-Type", file.ContentType);
part.SetFile(file);
parts.Add(part);

UploadOperation upload = await uploader.CreateUploadAsync(new Uri("upload_url",UriKind.Absolute), parts);

await upload.StartAsync().AsTask(cts.token);  // cts is CancellationTokenSource

ただし、このコードを実行すると、次のような例外が発生します

WinRT 情報: 'boundary': 'Content-Type' ヘッダーが設定されている場合、境界を空にすることはできず、'Content-Type' ヘッダーに設定されている境界と一致する必要があります。

私のコードで間違っている/欠けているものは何ですか?

4

2 に答える 2

1

4 つのパラメーターを指定して CreateUploadAsync を使用する場合は、次の方法が役立つ場合があります。

var uploader = new BackgroundUploader();
uploader.SetRequestHeader("Content-Type", "multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY-3770FB3C-534D-4E6B-9BE0-392FDA960F7B");

var upload = await uploader.CreateUploadAsync(uri, parts, "form-data", "0xKhTmLbOuNdArY-3770FB3C-534D-4E6B-9BE0-392FDA960F7B");

await upload.StartAsync();

"" (引用符) なしで "SetRequestHeader" に境界を設定します。CreateUploadAsync の最後のパラメーターと同じ境界を後で設定します。

于 2014-11-18T12:52:58.917 に答える
0

コンテンツ パーツのリストを渡す場合は、Conent-Type ヘッダーを設定する必要はありません。自動的に設定されます。

ただし、どうしてもそうする場合は、次のことを試してください。

uploader.SetRequestHeader(
    "Content-Type", 
    "multipart/form-data; boundary=\"foo_bar_baz\"");

アップデート:

4 つのパラメーターを受け取るオーバーロードを使用してみてくださいCreateUploadAsync。4 番目のパラメーターは境界です。ここを参照してください: http://msdn.microsoft.com/en-us/library/ie/hh923975

于 2014-10-11T19:05:13.033 に答える