Posting a photo without metadata for Picasa Web Album (result 403 Forbidden)


Occured error(return 403 Forbidden) when upload a Photo without metadata to Picasa web album. (Memo: it'susing an OAuth2.0, "userId" is not gmail adress[numerical id]) i don't know occasion. anybody please technical support thanks

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


I'm assuming that your accessToken is not null...

This is my code and it works for me:

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


To make this code work, you will need to include some libraries.
I used these:

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
guava-11.0.1.jar

You can find them here:
http://code.google.com/p/google-api-java-client/downloads/detail?name=google-api-java-client-1.10.2-beta.zip