You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java自动生成Dropbox Access Token以实现文件上传自动化

如何用Java自动生成Dropbox Access Token并实现文件上传自动化

核心结论

可以通过Java代码自动获取有效的Dropbox Access Token,无需手动重复生成。关键是利用OAuth 2.0授权码流程获取长期有效的刷新Token(Refresh Token),后续每次运行脚本时,用刷新Token自动换取新的Access Token即可。

前期准备

  1. 在Dropbox开发者控制台创建应用,记录下App Key和App Secret。
  2. 首次手动完成授权流程,获取刷新Token:
    • 生成授权URL:https://www.dropbox.com/oauth2/authorize?client_id=<你的App Key>&response_type=code&token_access_type=offline
    • 访问该URL,登录Dropbox账号并授权你的应用,获取授权码(Authorization Code)。
    • 用授权码交换初始Access Token和Refresh Token(这一步可通过代码或Postman完成,后续只需保存Refresh Token)。

使用Dropbox官方SDK实现(推荐)

1. 添加依赖

如果用Maven,在pom.xml中加入:

<dependency>
    <groupId>com.dropbox.core</groupId>
    <artifactId>dropbox-core-sdk</artifactId>
    <version>5.4.0</version>
</dependency>

2. 首次获取Refresh Token(仅需执行一次)

import com.dropbox.core.DbxAppInfo;
import com.dropbox.core.DbxRequestConfig;
import com.dropbox.core.DbxWebAuth;
import com.dropbox.core.DbxWebAuthNoRedirect;
import com.dropbox.core.json.JsonReadException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DropboxAuthInit {
    public static void main(String[] args) throws IOException, JsonReadException {
        String appKey = "你的App Key";
        String appSecret = "你的App Secret";
        DbxRequestConfig config = DbxRequestConfig.newBuilder("dropbox/java-auto-upload").build();
        DbxAppInfo appInfo = new DbxAppInfo(appKey, appSecret);

        DbxWebAuthNoRedirect webAuth = DbxWebAuthNoRedirect.newBuilder(config, appInfo).build();
        String authorizeUrl = webAuth.start();
        System.out.println("请访问以下URL授权:" + authorizeUrl);
        System.out.print("输入授权码:");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String authCode = br.readLine().trim();

        DbxWebAuth.AuthFinish authFinish = webAuth.finish(authCode);
        System.out.println("保存以下Refresh Token用于后续自动化:" + authFinish.getRefreshToken());
        System.out.println("初始Access Token:" + authFinish.getAccessToken());
    }
}

3. 自动化获取Access Token并上传文件

import com.dropbox.core.DbxAppInfo;
import com.dropbox.core.DbxRequestConfig;
import com.dropbox.core.DbxWebAuth;
import com.dropbox.core.v2.DbxClientV2;
import com.dropbox.core.v2.files.FileMetadata;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class DropboxAutoUpload {
    public static void main(String[] args) throws IOException {
        String appKey = "你的App Key";
        String appSecret = "你的App Secret";
        String refreshToken = "你保存的Refresh Token";
        String localFilePath = "/path/to/your/local/file.txt";
        String dropboxFilePath = "/remote/file.txt";

        // 初始化配置
        DbxRequestConfig config = DbxRequestConfig.newBuilder("dropbox/java-auto-upload").build();
        DbxAppInfo appInfo = new DbxAppInfo(appKey, appSecret);

        // 用Refresh Token获取新的Access Token
        DbxWebAuth.RefreshResult refreshResult = DbxWebAuth.refresh(config, appInfo, refreshToken);
        String newAccessToken = refreshResult.getAccessToken();

        // 创建客户端并上传文件
        DbxClientV2 client = new DbxClientV2(config, newAccessToken);
        try (InputStream in = new FileInputStream(localFilePath)) {
            FileMetadata metadata = client.files().uploadBuilder(dropboxFilePath)
                    .uploadAndFinish(in);
            System.out.println("文件上传成功:" + metadata.getPathDisplay());
        }
    }
}

不使用SDK的HTTP请求方式

如果不想依赖官方SDK,可以直接发送HTTP请求获取Access Token:

用Refresh Token换取Access Token的请求

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class DropboxTokenFetcher {
    public static String getNewAccessToken(String appKey, String appSecret, String refreshToken) throws IOException {
        URL url = new URL("https://api.dropbox.com/oauth2/token");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);

        String postData = String.format(
                "grant_type=refresh_token&refresh_token=%s&client_id=%s&client_secret=%s",
                refreshToken, appKey, appSecret
        );
        byte[] postDataBytes = postData.getBytes(StandardCharsets.UTF_8);
        conn.getOutputStream().write(postDataBytes);

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder response = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            response.append(line);
        }
        br.close();

        // 解析JSON响应提取access_token(实际建议用Jackson/Gson等JSON库解析)
        String jsonResponse = response.toString();
        return jsonResponse.split("\"access_token\":\"")[1].split("\"")[0];
    }
}

调用该方法获取Token后,即可用Token调用Dropbox上传API(https://content.dropboxapi.com/2/files/upload)完成文件上传。

注意事项

  • Refresh Token长期有效,除非用户主动撤销应用授权,或你的应用被Dropbox禁用。
  • 务必妥善保管Refresh Token、App Key和App Secret,不要泄露到公共代码仓库。
  • 官方SDK会自动处理Token过期和刷新逻辑,推荐使用SDK以减少手动处理的复杂度。

内容的提问来源于stack exchange,提问作者Vaibhav Chavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:17:46