我目前正在尝试构建一个应用程序,让用户从他们的库中选择一张照片(或拍照)并将其上传到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字符串。在任何情况下,我都无法让它工作,我完全失去了。有人有任何想法吗?任何帮助将不胜感激。
答案 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();
}