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 中遇到异常 Unsupported media type (415)

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

我究竟做错了什么?或者什么会导致这种异常?

编辑:当我在这里和我的回答中评论时,我解决了我的问题。我认为最后我基本上只是将一些数据发送到服务器,这些数据被识别和解释为我想要的。因此,如果我使用 BackgroundUploader,我不仅会上传一些文件,还会发送有关我如何做到这一点的信息(正如我在回答中提到的那样)。因此,通过同样的想法,我也可以将文件夹上传到服务器,并且我不会发送任何实际内容,只是关于如何执行此操作的一些描述。如果我比较我通过 HttpRequest 和 BackgroundUploader 发出的请求,它们是相等的,这就是我想要的。

4

1 回答 1

0

所以问题部分是请求的标头。我的请求中有一些被服务器识别的标头,我试图通过 SetRequestheader 方法将其放入 BackgroundUploader 但它不起作用。正如 Kieqic 建议的那样,我使用了 Fiddler,并通过它比较了 HttpRequest 和 BackgroundUploader 发出的请求。我发现它们完全不同。因此,通过 SetRequestheader,我添加了一些部分,例如预期的 Content-Type,而对于 header 的其余部分,以使它们相等,我将其添加到我的文件内容之前作为字节数组。这很有效,所以在我的情况下,结论是使用 Fiddler 帮助我构建请求标头。

于 2013-10-22T06:54:38.430 回答