2012-04-05 7 views
0

Fehler aufgetreten (403 unzulässig) beim Hochladen eines Fotos ohne Metadaten in Picasa-Webalbum. (Memo: Es ist ein OAuth2.0, "userId" ist nicht Gmail-Adresse [numerische ID]) Ich weiß nicht, Anlass. jemand bitte den technischen Support dankVeröffentlichen eines Fotos ohne Metadaten für Picasa Web Album (Ergebnis 403 verboten)

public String setdData(Context context, String filePath, String userId, String albumId, String accessToken) { 

    // new ImageUploader(context, filePath, filePath).run(); 
    String url = "https://picasaweb.google.com/data/feed/api/user/" + userId + "/albumid/" 
     + albumId; 
    HttpClient httpClient = new DefaultHttpClient(); 
    File file = new File(filePath); 
    HttpPost httpPost = new HttpPost(url); 
    httpPost.setHeader("GData-Version", "2"); 
    // httpPost.addHeader("MIME-version", "1.0"); 
    httpPost.setHeader("Content-type", "image/jpeg"); 
    httpPost.setHeader("Slug", "plz-to-love-realcat.jpg"); 
    // httpPost.addHeader("Content-Length", String.valueOf(file.length())); 
    httpPost.setHeader("Authorization", "GoogleLogin auth=" + accessToken); 
    // httpPost.setHeader("Authorization", "OAuth " + accessToken); 

    InputStreamEntity reqEntity; 
    org.apache.http.HttpResponse response; 

    try { 
     reqEntity = new InputStreamEntity(new FileInputStream(file), file.length()); 

     String CONTENTTYPE_BINARY = "binary/octet-stream"; 
     reqEntity.setContentType(CONTENTTYPE_BINARY); 
     reqEntity.setChunked(true); 
     httpPost.setEntity(reqEntity); 
     response = httpClient.execute(httpPost); 

     Log.d("Picasa Upload", "STATUS CODE : " + response.getStatusLine().getStatusCode()); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Antwort

1

Ich gehe davon aus, dass Ihr accessToken nicht null ist ...

Dies ist mein Code und es funktioniert für mich:

public boolean setdData(Context context, String filePath, String userId, String albumId, String accessToken) { 
    boolean success = false; 
    Bitmap bitmap = BitmapFactory.decodeFile(filePath); 

    if (bitmap != null) { 
     try { 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 87, baos); 
      byte[] data = baos.toByteArray(); 

      ByteArrayInputStream inputStream = new ByteArrayInputStream(data); 
      HttpRequestFactory requestFactory = new NetHttpTransport().createRequestFactory(); 
      InputStreamContent content = new InputStreamContent("image/jpeg", inputStream); 

      HttpRequest request = requestFactory.buildPostRequest(new genericUrl("https://picasaweb.google.com/data/feed/api/user/"+userId+"/"+albumId+"/default"), content); 
      GoogleHeaders headers = new GoogleHeaders(); 
      String fileName = "Whatever..."; 
      headers.setSlugFromFileName(fileName); 
      headers.setAuthorization("OAuth " + accessToken); 
      request.setHeaders(headers); 
      request.execute().ignore(); 
      // Success! 
      success = true 
     } catch (IOException e) { 
     } 
    } 
    return success; 
} 


Damit dieser Code funktioniert, müssen Sie einige Bibliotheken hinzufügen.
Früher habe ich diese:

google-http-client-1.10.2-beta.jar
google-api-client-1.10.2-beta.jar
google-oauth-client-1.10.0- beta.jar
jsr305-1.3.9.jar
Guave-11.0.1.jar

Sie können sie hier finden:
http://code.google.com/p/google-api-java-client/downloads/detail?name=google-api-java-client-1.10.2-beta.zip