将图像上传到 Windows Phone 上的 Imgur

本文关键字:Phone 上的 Imgur Windows 图像 | 更新日期: 2023-09-27 18:36:13

我目前正在尝试构建一个应用程序,该应用程序涉及用户从他们的库中选择照片(或拍照)并将其上传到Imgur。我已经为Windows Forms应用程序构建了一个相当强大的C# Imgur客户端,但不幸的是,将其移植到Windows Phone是一场灾难。

这是我正在使用的代码:

public void UploadImageAsync(Stream PhotoStream)
{
    try
    {
        WebClient w = new WebClient();
        w.Headers["Content-type"] = "application/x-www-form-urlencoded";
        string data = "key="+PublicKey+
                "&_fake_status=200"+
                "&type=base64"+
                "&image="+PhotoStreamToBase64(PhotoStream);
        w.UploadStringAsync(new Uri("http://api.imgur.com/2/upload", UriKind.Absolute), "POST", data);
    }
    catch (Exception ex)
    {
    }
}
string PhotoStreamToBase64(Stream PhotoStream)
{
    MemoryStream memoryStream = new MemoryStream();
    PhotoStream.CopyTo(memoryStream);
    byte[] result = memoryStream.ToArray();
    return System.Convert.ToBase64String(result);
}

有趣(和令人沮丧)的是,似乎一切正常,上传完成后我收到了成功的响应。但是,在上传后尝试查看图像时,结果如下所示:https://i.stack.imgur.com/OKgOg.jpg。

这让我相信图像流以某种方式被错误地转换为字节数组,或者错误地转换为 base 64 字符串。无论如何,我无法让它工作,我完全不知所措。有人知道吗?任何帮助将不胜感激。

将图像上传到 Windows Phone 上的 Imgur

SpikeX将我推向Imgur的C# API示例,用于图像上传。从他们的示例中借用 Base64 编码逻辑解决了这个问题。以下是现在可用的 PhotoStreamToBase64 方法:

string PhotoStreamToBase64(Stream PhotoStream)
{
    MemoryStream memoryStream = new MemoryStream();
    PhotoStream.CopyTo(memoryStream);
    byte[] result = memoryStream.ToArray();
    string base64img = System.Convert.ToBase64String(result);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < base64img.Length; i += 32766)
    {
        sb.Append(Uri.EscapeDataString(base64img.Substring(i, Math.Min(32766, base64img.Length - i))));
    }
    return sb.ToString();
}