在Windows Phone上将图像上传到Imgur

时间:2012-06-01 20:17:07

标签: c# image windows-phone-7 base64 imgur

我目前正在尝试构建一个应用程序,让用户从他们的库中选择一张照片(或拍照)并将其上传到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);
}

有趣的(令人沮丧的)是看起来好像一切正​​常,并且在上传完成后我收到了成功的回复。但是,在上传后尝试查看图片时,结果如下所示:http://i.imgur.com/NWY0R.jpg

这让我相信,不知何故,图像流被错误地转换为字节数组,或者错误地转换为基本64字符串。在任何情况下,我都无法让它工作,我完全失去了。有人有任何想法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

SpikeX将我推向Imgur C# API example进行图片上传。从他们的示例中借用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();
}