2011-07-05 6 views
1

API를 사용하여 Picasa에 새 사진을 업로드하려고합니다. 나는 다음과 같은 오류를 얻고있다 작동하지 코드 :사진을 picasa 웹에 업로드 중

Exception Details: System.Net.WebException: The remote server returned an error: (400) Bad Request. 

내 코드 :

string imgPath = "C:\foo.png"; 
StreamReader reader = new StreamReader(imgPath); 
string imgBin = reader.ReadToEnd(); 
reader.Close(); 
string id=""//picasa ID 
string album = "";//album name 
string url = String.Format("http://www.picasaweb.google.com/data/feed/api/user/{0}/album/{1}",id, album); 
string auth = ""; 

     Byte[] send = Encoding.UTF8.GetBytes(imgBin); 
     int length = send.Length; 
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); 
     req.Method = "POST"; 
     req.ContentType = "image/png"; 
     req.ContentLength = length; 
     req.Headers.Add("Authorization", "GoogleLogin auth=" + auth); 
     req.Headers.Add("Slug", "test"); 
     Stream stream = req.GetRequestStream(); 
     stream.Write(send, 0, length); 
     stream.Close(); 
     WebResponse response = req.GetResponse(); 
     StreamReader reader = new StreamReader(response.GetResponseStream()); 
     string res = reader.ReadToEnd(); 
     reader.Close(); 

감사

답변

3

문제는 이미지를 읽는 방법에 가능성이 높습니다. 대신 문자열로 읽는 유사한 다음에 직접 요청 스트림을 작성하려고 :

using (Stream fileStream = new FileStream(imgPath, FileMode.Open, FileAccess.Read)) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    request.Method = "POST"; 
    request.ContentType = "image/png"; 
    request.ContentLength = fileStream.Length; 
    request.Headers.Add(HttpRequestHeader.Authorization, "GoogleLogin auth=" + auth); 
    request.Headers.Add("Slug", "test"); 

    using (Stream requestStream = request.GetRequestStream()) 
    { 
     byte[] buffer = new byte[4096]; 
     int bytesRead = 0; 
     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      requestStream.Write(buffer, 0, bytesRead); 
     } 

     fileStream.Close(); 
     requestStream.Close(); 
    } 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    StreamReader responseReader = new StreamReader(response.GetResponseStream()); 

    string responseStr = responseReader.ReadToEnd(); 

} 
+0

헤더 인증이 왜 작동하지? –

+0

헤더에 표시되는 오류는 무엇입니까? – Rob

+0

: 이제 다음 오류가 발생합니다. 원격 서버가 오류를 다시 발생했습니다. (403) 금지되었습니다. –

0
  string username = form["UserName"].ToString(); // <-- ### USERNAME HERE ### 

      string password = form["Password"].ToString(); // <-- ### PASSWORD HERE ### 
      PicasaService picasaService = new PicasaService("Tester"); 
      picasaService.setUserCredentials(username, password); 

      // 2. Create a test album 
      // 
      AlbumEntry entry = new AlbumEntry(); 
      entry.Title.Text = "test-69"; 
      entry.Summary.Text = "test-69"; 
      AlbumAccessor access = new AlbumAccessor(entry); 
      PicasaEntry album = picasaService.Insert(new Uri(PicasaQuery.CreatePicasaUri(username)), entry); 

      access = new AlbumAccessor(album); 

      // 3. Upload a photo 
      picasaService.Insert(new Uri(PhotoQuery.CreatePicasaUri(username, access.Id)), System.IO.File.OpenRead("thumb-1.jpg"), "image/jpeg", "thumb-1.jpg"); 
관련 문제