2012-06-01 3 views
0

В настоящее время я пытаюсь создать приложение, в котором пользователь выбирает фотографию из своей библиотеки (или снимает фотографию) и загружает ее в Imgur. Я уже создал довольно надежный клиент C# Imgur для приложений Windows Forms, но, к сожалению, перенос его на Windows Phone стал катастрофой.Загрузка изображения в 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-строчную строку. В любом случае, я не могу заставить его работать, и у меня полная потеря. Кто-нибудь знает? Любая помощь будет принята с благодарностью.

+2

Вы знаете Imgur дает полное [C# API пример] (http://api.imgur.com/examples#uploading_cs), не так ли? Если вы используете ту же логику, что и ваш код не работает, вероятно, способ, которым вы открываете изображение, неверен (или ваше изображение повреждено). – qJake

+1

Ах да, я действительно знал пример, когда я делал свой первоначальный клиент. Я следовал их логике кодирования в этом примере, и это работало как шарм, так что спасибо за то, что вы натолкнули меня в правильном направлении! –

ответ

1

SpikeX подтолкнуло меня к Imgur's 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(); 
} 
Смежные вопросы