【问题标题】:How to upload a photo to 500px using the BackgroundUploader in Windows Phone 8.1?如何使用 Windows Phone 8.1 中的 BackgroundUploader 将照片上传到 500px?
【发布时间】:2014-10-16 10:30:48
【问题描述】:

我有以下使用 OAuth 上传的代码。

public async Task UploadPhotoContinueAsync(IEnumerable<StorageFile> files)
{
    var uri = string.Format("https://api.500px.com/v1/photos/upload?name={0}&description={1}&privacy=0&category=0", "test name", "test description");
    var backgroudUploader = new BackgroundUploader();
    var headers = OAuthUtility.BuildBasicParameters(consumerKey, consumerSecret, uri, HttpMethod.Post, GetAccessToken());
    var header = string.Empty;
    var file = files.First();
    foreach (var item in headers)
    {
        header += string.Format(@"{0}=""{1}"",", item.Key, item.Value);
    }

    header = header.Remove(header.Length - 1);

    backgroudUploader.SetRequestHeader("Authorization", string.Format("OAuth {0}", header));
    backgroudUploader.SetRequestHeader("Filename", file.Name);

    var op = backgroudUploader.CreateUpload(new Uri(uri), file);
    try
    {
            var result = await op.StartAsync();
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }
}

问题是每次我开始操作时,我都会从 API 收到内部服务器错误。

我似乎无法弄清楚问题所在。

有人发现了吗?谢谢。

编辑:

我终于让 Fiddler 工作了。以下是应用发送到 API 的标头:

【问题讨论】:

  • 您收到的错误中有任何消息吗?如果该位置上已经存在文件名“test”,是否会导致问题?
  • 不幸的是,我看不到响应中嵌入了什么消息。至少,我不知道在使用 UploadOperation 时如何查看它。它只是状态码 500 和内部服务器错误。此外,我还使用他们的测试控制台 API 上传了多个“测试”命名图像。
  • 如果您安装了 Fiddler,您应该能够准确地看到正在发生的事情和正在发生的事情。
  • 问题是 Fiddler 不工作。我试过了:(
  • 确保为 Fiddler for Win8 进行了配置。此外,您可以尝试手动创建相同的请求(在 Fiddler 中手动设置标头)并查看响应内容。你在发出请求之前检查过请求吗?确保您的 OAuth 令牌被正确解析,等等。

标签: c# windows-runtime windows-phone-8.1 winrt-async


【解决方案1】:

我注意到 Fiddler 版本中没有内容类型。看起来 500px 需要一个多部分的内容类型,而您在 twitter 上的控制台屏幕截图显示正在设置。

您是否尝试过使用 BackgroundUploader.SetRequestHeader 强制内容类型?

backgroundUploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundray); backgroundUploader.Method = "POST";

如果失败,也许使用 BackgroundTransferContentPart? http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.backgroundtransfer.backgroundtransfercontentpart.aspx

这里有一些想法: https://social.msdn.microsoft.com/Forums/windowsapps/en-US/9b2a31c0-30e3-499b-a265-10e8d97a79ad/upload-video-file-to-server-with-backgrounduploader?forum=winappswithcsharp

【讨论】:

  • 除非您这样做然后将其发布为答案。 :) 很高兴你成功了。
【解决方案2】:

我知道这不是很专业,但我终于找到了修复我的代码的方法:)

下面是更新后的函数:

public async Task UploadPhotoContinueAsync(IEnumerable<StorageFile> files)
{
    var uri = string.Format("https://api.500px.com/v1/photos/upload?name={0}&description={1}&privacy=0&category=0", "test name", "test description");
    var backgroudUploader = new BackgroundUploader();
    var headers = OAuthUtility.BuildBasicParameters(consumerKey, consumerSecret, uri, HttpMethod.Post, GetAccessToken());
    var header = string.Empty;
    var file = files.First();
    foreach (var item in headers)
    {
        header += string.Format(@"{0}=""{1}"", ", item.Key, item.Value);
    }

    header = header.Remove(header.Length - 2);

    backgroudUploader.SetRequestHeader("Authorization", string.Format("OAuth {0}", header));
    backgroudUploader.SetRequestHeader("Filename", file.Name);
    string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
    backgroudUploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
    backgroudUploader.Method = "POST";

    var parts = new List<BackgroundTransferContentPart>();
    var part = new BackgroundTransferContentPart();
    part.SetHeader("Content-Disposition", @"form-data; name=""file""; filename=""" + file.Name + "\"");
    part.SetFile(file);
    parts.Add(part);

    var op = await backgroudUploader.CreateUploadAsync(new Uri(uri), parts, "", boundary);
    try
    {
        var result = await op.StartAsync();
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }
}

感谢所有帮助过的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多