为Picasa网络相册发布没有元数据的照片(结果403禁止)

时间:2012-04-05 06:26:32

标签: java android picasa

将没有元数据的照片上传到Picasa网络相册时出现错误(返回403 Forbidden)。 (备注:使用OAuth2.0,“userId”不是gmail地址[数字ID]) 我不知道场合。 任何人请技术支持 感谢

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

1 个答案:

答案 0 :(得分:1)

我假设你的accessToken不是空的......

这是我的代码,它适用于我:

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


要使此代码有效,您需要包含一些库 我用过这些:

谷歌-HTTP-客户1.10.2-beta.jar
谷歌的API客户端-1.10.2-beta.jar
谷歌-OAuth的客户端1.10.0-beta.jar
jsr305-1.3.9.jar
guava-11.0.1.jar

你可以在这里找到它们:
http://code.google.com/p/google-api-java-client/downloads/detail?name=google-api-java-client-1.10.2-beta.zip