Dropbox提供了基于各种类型的API和应用类型的开发工具和接口,详细的可以参考 https://www.dropbox.com/developers/core 。这里我只介绍基于Java的文件操作实现,可以参考 https://www.dropbox.com/developers/core/start/java 。
一、创建应用
有点像Google的APP,需要先创建一个应用,创建应用的链接为 https://www.dropbox.com/developers/apps (前提是你已经有了Dropbox账号,并已经登陆了Dropbox),点击 Create App 后有两个选项:
- Dropbox API App
- Drop-ins App
Drop-ins App 从它的介绍看来,我理解是基于Web和Mobile的应用的API,所以这里我选择 Dropbox API App,剩下的选项如下图:
App的名字可能需要另取,以通过验证。
提交完以后就进入下一页了,对应于刚创建的App的详细信息:
这里面最重要的部分就是红色框里的App key 和App Secret,需要用他们来获取AccessToken,以允许最终的操作的执行,蓝色部分可以指定获取Authorize Code时的返回链接,也即获取Authorize Code所指定URL里的redirect_url参数。 不过对我们的Demo应用,这里的所有值都可以为空,不影响。
二、添加依赖
App创建完后,基本上就可以开始应用的开发了。不过还差一点点。我们先要去把Dropbxo相关的依赖加上。Dropbox提供了一个用于Java应用开发的工具包,链接为:https://www.dropbox.com/developers/core/sdks/java 。如果是普通的Java应用,可能就需要安装它提供的JDK安装包。如果是Maven应用,则简单的添加以下依赖即可:
<dependency> <groupId>com.dropbox.core</groupId> <artifactId>dropbox-core-sdk</artifactId> <version>[1.7,1.8)</version> </dependency>
我这里使用基于Maven依赖的方式。不过哪一种方式对于后面的开发都不影响。
三、获取Authorize Code
Dropbox应用是基于HTTP和OAuth认证方式进行访问的。因此在真正操作之前,我们首先需要获取一个有效的Access Token,然后在以后的访问和操作中都使用这个Access Token进行认证。
这个时候就需要用到上面的App Key和App Secret了。我们需要用它去申请一个Authorize code。其实就是一个用于生成Authorize Code的链接,这个链接打开以后有两个选项:取消 和 同意。如果App拥有者(App Owner,在咱们的例子,也就是我们自己)点击了同意,则会生成一个Authorize Code,App拥有都需要把这个Code发给访问应用的申请人。
每个应用对应的链接是固定的格式,最简单的就是Authorize URL:
https://www.dropbox.com/1/oauth2/authorize?client_id=APP_KEY&response_type=code
(替换APP_KEY为应用对应的App Key,看上图)
对于每个应用申请者来说,你都需要把三个值发给他:
-
App Key
-
App Secret
-
点击Authorize URL里的 同意 后生成的一个Authorize Code.
如果用代码的方式获取Authorize URL,则代码如下:
String APP_KEY = "APP_KEY"; String APP_SECRET = "APP_SECRET"; DbxAppInfo appInfo = new DbxAppInfo(APP_KEY, APP_SECRET); DbxRequestConfig config = new DbxRequestConfig("dropbox/1.0", Locale .getDefault().toString()); DbxWebAuthNoRedirect webAuth = new DbxWebAuthNoRedirect(config, appInfo); // Have the user sign in and authorize your app. String authorizeUrl = webAuth.start();
三、获取Access Token
有了App Key,App Secret和Authorize Code,以后,可以用以下代码(其实这个代码最终构建的就是一个HTTP的请求,所以也可以直接发HTTP的请求)去获取Access Token:
String APP_KEY = "APP_KEY"; String APP_SECRET = "APP_SECRET"; String AUTHORIZE_CODE = "AUTHORIZE_CODE"; DbxAppInfo appInfo = new DbxAppInfo(APP_KEY, APP_SECRET); DbxRequestConfig config = new DbxRequestConfig("dropbox/1.0", Locale .getDefault().toString()); DbxWebAuthNoRedirect webAuth = new DbxWebAuthNoRedirect(config, appInfo); DbxAuthFinish authFinish = webAuth.finish(AUTHORIZE_CODE); String accessToken = authFinish.accessToken;
这个Access Token可以存起来,以重复利用,可以使用以下代码将它存到一个文件里(也可以是其他地方):
DbxAuthInfo authInfo = new DbxAuthInfo(accessToken, appInfo.host); DbxAuthInfo.Writer.writeToFile(authInfo, new File("access.auth"));
读取的时候,可以用类似的方式:
DbxAuthInfo readFromFile = DbxAuthInfo.Reader.readFromFile(new File("access.auth")); String accessToken = readFromFile.accessToken;