Java对接百度网盘代码示例

涛哥 Java代码1

以下是一个简单的Java对接百度网盘代码示例,用于对接百度网盘API,实现文件上传和下载的功能。请注意,在使用此代码之前,您需要先在百度网盘开发者平台注册并获取到相应的API Key和Secret Key。

import java.io.*;
import java.net.*;
import java.security.*;
import java.util.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import org.json.*;

public class BaiduNetdisk {

    private static final String API_KEY = "YOUR_API_KEY";
    private static final String SECRET_KEY = "YOUR_SECRET_KEY";
    private static final String ACCESS_TOKEN_URL = "https://openapi.baidu.com/oauth/2.0/token";
    private static final String UPLOAD_URL = "https://c.pcs.baidu.com/rest/2.0/pcs/file";
    private static final String DOWNLOAD_URL = "https://d.pcs.baidu.com/rest/2.0/pcs/file";

    public static void main(String[] args) {
        try {
            // Step 1: 获取Access Token
            String accessToken = getAccessToken();

            // Step 2: 上传文件
            String remotePath = "/test.txt";
            String localPath = "C:\\test.txt";
            String uploadResult = uploadFile(accessToken, remotePath, localPath);
            System.out.println(uploadResult);

            // Step 3: 下载文件
            String downloadResult = downloadFile(accessToken, remotePath, "C:\\test2.txt");
            System.out.println(downloadResult);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String getAccessToken() throws Exception {
        String url = ACCESS_TOKEN_URL + "?grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY;
        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(5000);
        connection.setReadTimeout(5000);

        int responseCode = connection.getResponseCode();
        if (responseCode == 200) {
            String result = readInputStream(connection.getInputStream());
            JSONObject jsonObject = new JSONObject(result);
            return jsonObject.getString("access_token");
        } else {
            throw new Exception("Failed to get access token. Response code: " + responseCode);
        }
    }

    private static String uploadFile(String accessToken, String remotePath, String localPath) throws Exception {
        String boundary = "-----------------------------" + System.currentTimeMillis();
        String encodeBoundary = URLEncoder.encode(boundary, "UTF-8");
        File file = new File(localPath);

        HttpURLConnection connection = (HttpURLConnection) new URL(UPLOAD_URL + "?method=upload&access_token=" + accessToken + "&path=" + remotePath + "&type=tmpfile").openConnection();
        connection.setRequestMethod("POST");
        connection.setConnectTimeout(5000);
        connection.setReadTimeout(5000);
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

        DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
        outputStream.writeBytes("--" + boundary + "\r\n");
        outputStream.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"\r\n");
        outputStream.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

        FileInputStream inputStream = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, length);
        }
        inputStream.close();

        outputStream.writeBytes("\    outputStream.writeBytes("--" + boundary + "--\r\n");
    outputStream.flush();
    outputStream.close();

    int responseCode = connection.getResponseCode();
    if (responseCode == 200) {
        String result = readInputStream(connection.getInputStream());
        JSONObject jsonObject = new JSONObject(result);
        if (jsonObject.getInt("error_code") == 0) {
            return "File uploaded successfully.";
        } else {
            return "Failed to upload file. Error message: " + jsonObject.getString("error_msg");
        }
    } else {
        throw new Exception("Failed to upload file. Response code: " + responseCode);
    }
}

private static String downloadFile(String accessToken, String remotePath, String localPath) throws Exception {
    HttpURLConnection connection = (HttpURLConnection) new URL(DOWNLOAD_URL + "?method=download&access_token=" + accessToken + "&path=" + remotePath).openConnection();
    connection.setRequestMethod("GET");
    connection.setConnectTimeout(5000);
    connection.setReadTimeout(5000);

    int responseCode = connection.getResponseCode();
    if (responseCode == 200) {
        InputStream inputStream = connection.getInputStream();
        FileOutputStream outputStream = new FileOutputStream(localPath);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, length);
        }
        inputStream.close();
        outputStream.close();
        return "File downloaded successfully.";
    } else {
        throw new Exception("Failed to download file. Response code: " + responseCode);
    }
}

private static String readInputStream(InputStream inputStream) throws Exception {
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
    reader.close();
    return stringBuilder.toString();
}

请注意,这只是一个简单的Java对接百度网盘代码示例,实际应用中可能需要更复杂的逻辑和错误处理。如果您需要更详细的API文档和示例代码,请访问百度网盘开发者平台。