使用 Dropbox Java API 将文件上传到 Dropbox

发布于 2024-12-07 21:27:02 字数 5388 浏览 0 评论 0原文

我想使用 DropBox 的 java API 上传文件。以下代码获取 oauth_token 和 oauth_secret。但当我尝试上传文件时,我会遇到异常。
Java 类

package com.dropbox.client;

import com.dropbox.client.DropboxAPI.Config;
import java.io.File;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Charan
 */
public class DBmain {

    public DBmain() {
        System.setProperty("java.net.useSystemProxies", "true");
        Map configuration= new HashMap();
        configuration.put("consumer_key", "XXXXXXXXXXXXXXXX");
        configuration.put("consumer_secret", "XXXXXXXXXXXXXXXX");
        configuration.put("request_token_url", "http://api.dropbox.com/0/oauth/request_token");
        configuration.put("access_token_url", "http://api.dropbox.com/0/oauth/access_token");
        configuration.put("authorization_url", "http://api.dropbox.com/0/oauth/authorize");
        configuration.put("port",80);
        //configuration.put("trusted_access_token_url","http://api.getdropbox.com/0/token");
        configuration.put("server","api.getdropbox.com");
        configuration.put("content_server","api-content.dropbox.com");
        String username="[email protected]";
        String password="myPassword";
        try {
           Authenticator auth = new Authenticator(configuration);
           String url = auth.retrieveRequestToken("");
           String access_key = auth.getTokenKey();
           String access_secret = auth.getTokenSecret();
           System.out.println(access_key);
           System.out.println(access_secret);

           DropboxAPI api = new DropboxAPI();
           DropboxAPI.Config conf = api.new Config(configuration);
           api.authenticateToken("XXXXXXXXXXXX", "XXXXXXXXXXX", conf);
           System.out.println(api.isAuthenticated());
           URL resource = this.getClass().getResource("/config/testing.json");
            
           File f= new File(resource.toURI());
           api.putFile("dropbox", "/Project", f);

           //api.accountInfo(); //even this method gives me a exception
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
            new DBmain();
        }
}

异常

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: method <init>()V not found
    at org.apache.http.impl.client.DefaultHttpClient.createHttpContext(DefaultHttpClient.java:205)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:532)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    at com.dropbox.client.DropboxClient.putFile(DropboxClient.java:299)
    at com.dropbox.client.DropboxAPI.putFile(DropboxAPI.java:463)
    at com.dropbox.client.DBmain.<init>(DBmain.java:58)
    at com.dropbox.client.DBmain.main(DBmain.java:70)
Java Result: 1

一些额外信息

编辑日期:18-6-2011

我更改了httpclient-4.0-beta1.jar 和 httpcore-4.0-alpha6.jar 分别为 httpclient-4.0.jar 和 httpcore-4.0.1.jar,我不再收到上述异常 [ java.lang.NoSuchMethodError ] 这个stackoverflow问题帮助我解决了这个问题: java.lang .NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: method()V not found

但现在我得到 UnknownhostException执行 API 的任何方法时

com.dropbox.client.DropboxException: java.net.UnknownHostException: api.getdropbox.com:80
    at com.dropbox.client.RESTUtility.request(RESTUtility.java:250)
    at dump.DropboxClient.accountInfo(DropboxClient.java:121)
    at com.charan.client.DBmain.<init>(DBmain.java:57)
    at com.charan.client.DBmain.main(DBmain.java:65)
Caused by: java.net.UnknownHostException: api.getdropbox.com:80
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
    at java.net.Socket.connect(Socket.java:525)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.dropbox.client.RESTUtility.executeRequest(RESTUtility.java:172)
    at com.dropbox.client.RESTUtility.request(RESTUtility.java:248)
    ... 3 more

I want to upload files using the java API for DropBox. The following code gets me the oauth_token and oauth_secret. but when ever I try to upload a file I get a exception.
Java Class

package com.dropbox.client;

import com.dropbox.client.DropboxAPI.Config;
import java.io.File;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Charan
 */
public class DBmain {

    public DBmain() {
        System.setProperty("java.net.useSystemProxies", "true");
        Map configuration= new HashMap();
        configuration.put("consumer_key", "XXXXXXXXXXXXXXXX");
        configuration.put("consumer_secret", "XXXXXXXXXXXXXXXX");
        configuration.put("request_token_url", "http://api.dropbox.com/0/oauth/request_token");
        configuration.put("access_token_url", "http://api.dropbox.com/0/oauth/access_token");
        configuration.put("authorization_url", "http://api.dropbox.com/0/oauth/authorize");
        configuration.put("port",80);
        //configuration.put("trusted_access_token_url","http://api.getdropbox.com/0/token");
        configuration.put("server","api.getdropbox.com");
        configuration.put("content_server","api-content.dropbox.com");
        String username="[email protected]";
        String password="myPassword";
        try {
           Authenticator auth = new Authenticator(configuration);
           String url = auth.retrieveRequestToken("");
           String access_key = auth.getTokenKey();
           String access_secret = auth.getTokenSecret();
           System.out.println(access_key);
           System.out.println(access_secret);

           DropboxAPI api = new DropboxAPI();
           DropboxAPI.Config conf = api.new Config(configuration);
           api.authenticateToken("XXXXXXXXXXXX", "XXXXXXXXXXX", conf);
           System.out.println(api.isAuthenticated());
           URL resource = this.getClass().getResource("/config/testing.json");
            
           File f= new File(resource.toURI());
           api.putFile("dropbox", "/Project", f);

           //api.accountInfo(); //even this method gives me a exception
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
            new DBmain();
        }
}

Exception

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: method <init>()V not found
    at org.apache.http.impl.client.DefaultHttpClient.createHttpContext(DefaultHttpClient.java:205)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:532)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    at com.dropbox.client.DropboxClient.putFile(DropboxClient.java:299)
    at com.dropbox.client.DropboxAPI.putFile(DropboxAPI.java:463)
    at com.dropbox.client.DBmain.<init>(DBmain.java:58)
    at com.dropbox.client.DBmain.main(DBmain.java:70)
Java Result: 1

Some extra info

Edit Date:18-6-2011

I changed the httpclient-4.0-beta1.jar and httpcore-4.0-alpha6.jar to httpclient-4.0.jar and httpcore-4.0.1.jar respectively and I no longer get the above exception [ java.lang.NoSuchMethodError ]
This stackoverflow question helped me in solving this : java.lang.NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: method <init>()V not found

But Now I get UnknownhostException on execution of any methods of the API

com.dropbox.client.DropboxException: java.net.UnknownHostException: api.getdropbox.com:80
    at com.dropbox.client.RESTUtility.request(RESTUtility.java:250)
    at dump.DropboxClient.accountInfo(DropboxClient.java:121)
    at com.charan.client.DBmain.<init>(DBmain.java:57)
    at com.charan.client.DBmain.main(DBmain.java:65)
Caused by: java.net.UnknownHostException: api.getdropbox.com:80
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
    at java.net.Socket.connect(Socket.java:525)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.dropbox.client.RESTUtility.executeRequest(RESTUtility.java:172)
    at com.dropbox.client.RESTUtility.request(RESTUtility.java:248)
    ... 3 more

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仅一夜美梦 2024-12-14 21:27:02

你应该使用http-client 4.0.3 jar

You should use http-client 4.0.3 jar

捂风挽笑 2024-12-14 21:27:02

您的类不应该位于 com.dropbox.client 包中。尝试将其移动到另一个(即com.yourname.client)。您可能会造成名称冲突,并无意中覆盖了 Dropbox 客户端 API 中的某些内容。

Your class should NOT be in package com.dropbox.client. Try moving it to a different (i.e. com.yourname.client). It looks like you might be creating a name clash and inadvertently overriding something in the Dropbox client API.

怪我入戏太深 2024-12-14 21:27:02

您已指定 api.getdropbox.com:80 作为主机名。尝试使用 api.getdropbox.com 代替。

You have specified api.getdropbox.com:80 as the host name. Try using api.getdropbox.com instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文