0

現在、ユーザーがライブラリから写真を選択 (または写真を撮影) して 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 文字列に正しく変換されていないと思われます。いずれにせよ、私はそれを機能させることができず、完全に途方に暮れています。誰にもアイデアはありますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

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();
}
于 2012-06-01T20:37:56.823 に答える