Java代码实现百度网盘上传文件并自动刷新token

 这是主要的的目录结构:

这段代码主体是AutoUploadFile,把文件放到某一目录下名称格式为日期类型eg:2022-11-13然后修改配置文件的文件存放地址就可以自动上传文件(可以自己修改),其他配置如refreshToken可以去百度网盘开放平台(https://pan.baidu.com/union/doc/)查看如何获取;

1.AutoRefreshToken:用来自动刷新token

代码如下:

package com.example.demo.apps;


import com.alibaba.fastjson.JSON;
import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.util.UUID;

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import com.alibaba.fastjson.JSONObject;
import org.jsoup.*;


/**
 * @date 日期:2023/5/6 时间:11:57
 * @Description: 自动刷新token
 */
@Component
public class AutoRefreshToken {
/*    public static void main(String[] args) {
        try {
            String atoken = getAtoken();
            System.out.println(atoken);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/

    @Value("${Constant.APP_KEY}")
    String APP_KEY;
    @Value("${Constant.SECRET_KEY}")
    String SECRET_KEY;
    @Value("${Constant.refresh_token}")
    String refresh_token;

    @Value("${Constant.APP_ID}")
    String APP_ID;

 /*   public static void main(String[] args) throws Exception {
        String atoken = getAtoken();
        System.out.println(atoken);
    }*/


    public  String getAtoken() throws Exception {

       String url1 = "https://openapi.baidu.com/oauth/2.0/token?" +
                "grant_type=refresh_token&" +
                "refresh_token=" + refresh_token +
                "&client_id=" + APP_KEY +
                "&client_secret=" + SECRET_KEY;
   /*     String url1="https://openapi.baidu.com/oauth/2.0/token?" +
                "grant_type=refresh_token&" +
                "refresh_token=122.abf06f23035add703f92eecac6eb4919.YaIson6QQF9KmCuw7pQ6wPUWDY16KsK1V8bg9Rw.6Dv_WA&" +
                "client_id=fBulUWK7sTZo3s94gYSPveov9qsaq5LE&" +
                "client_secret=eapgT5k4XXmRRgfxxlcxR82e3gursVze";*/

        try {
            URL url = new URL(url1);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
          //  System.out.println(response.toString());
            Map map = JSON.parseObject(response.toString(), Map.class);
            String atoken = (String) map.get("access_token");
            // Return the atoken
            return atoken;
        } catch (Exception e) {
            System.out.println(e);
        }
        return "触发安全协议";
    }


}

2.AutoUploadFile:用来上传文件

代码如下: 

package com.example.demo.apps;


import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.*;
import java.io.File;
import java.io.IOException;

/**
 * @date 日期:2023/4/26 时间:09:57
 * @Description: 上传文件到百度网盘
 */

@Component
public class AutoUploadFile {

    @Autowired
    private SendEamil sendEamil;
    //操作文件 copy, mover, rename, delete
    String FILE_MANAGER_URL = " https://pan.baidu.com/rest/2.0/xpan/file";
    //预上传
    String GET_READY_FILE_URL = "https://pan.baidu.com/rest/2.0/xpan/file";
    //分片上传
    String SLICING_UPLOAD_FILE_URL = "https://d.pcs.baidu.com/rest/2.0/pcs/superfile2";
    //下载文件
    String DOWN_LOUE_URL = "https://pan.baidu.com/rest/2.0/xpan/multimedia";
    //文件搜索
    String FILE_SEARCH = "https://pan.baidu.com/rest/2.0/xpan/file?method=search";
    Logger logger = LoggerFactory.getLogger(getClass());
    //失败重试计数器
    int num = 0;
    //分片大小
    @Value("${Constant.UNIT}")
    Integer UNIT;
    //获取到的授权码
/*    @Value("${Constant.CODE}")
    String CODE;
   @Value("${Constant.filePath}")
    String filePath;*/

    @Value("${Constant.APP_ID}")
    String APP_ID;
    @Value("${Constant.APP_NAME}")
    String APP_NAME;
    @Value("${Constant.APP_KEY}")
    String APP_KEY;
    @Value("${Constant.SECRET_KEY}")
    String SECRET_KEY;
    @Autowired
    private AutoRefreshToken autoRefreshToken;
    //@Value("${Constant.ATOKEN}")
    String ATOKEN;


    @Value("${Constant.filePath}")
    String filePath;
    @Value("${Eamil.userName}")
    String userName;
    String fileName;

    /*
     * 自动刷新token
     * token每月过期一次
     * 通过定时任务每月刷新一次*/
    @Scheduled(cron = "${scheduling.getAtoken}")
    public void flushToken() {
        try {
            Properties prop = new Properties();
            String atoken1 = autoRefreshToken.getAtoken();
            prop.setProperty("ATOKEN", atoken1);
            FileWriter writer = new FileWriter("token.properties");
            prop.store(writer, "Optional header comment");
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description: TODO 保存文件
     * &#
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值