2012-06-01 4 views
0

현재 사용자가 자신의 라이브러리에서 사진을 선택하거나 사진을 찍어서 Imgur에 업로드하는 것과 관련된 앱을 제작하려고합니다. Windows Forms 응용 프로그램 용 C# Imgur 클라이언트를 이미 구축했지만 불행하게도 Windows Phone으로 이식하는 것은 큰 재앙이었습니다. 여기 Windows Phone에서 Imgur로 이미지 업로드하기

내가 사용하고있는 코드입니다 :

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

(http://api.imgur.com/examples#uploading_cs), 오른쪽 : 여기에 지금 기능 PhotoStreamToBase64 방법이다? 동일한 논리를 사용하고 있고 코드가 작동하지 않는 경우 이미지를 여는 방식이 잘못되었거나 이미지가 손상되었을 가능성이 큽니다. – qJake

+1

아, 예, 원래 클라이언트를 만들 때 예제를 알았습니다. 나는 그 예에서 그들의 부호화 논리를 따랐고 매력처럼 작동했기 때문에 올바른 방향으로 나를 밀어 주심에 감사드립니다! –

답변

1

SpikeX 이미지 업로드를 위해 Imgur의 C# API example을 향해 나를 밀었습니다. 그들의 예제에서 Base64 인코딩 로직을 빌려 문제를 해결했습니다. 당신은 Imgur 완전한 [C#을 API 예]를 제공합니다 알고

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(); 
}