将图像上传到 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 字符串。无论如何,我无法让它工作,我完全不知所措。有人知道吗?任何帮助将不胜感激。
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();
}