这是主要的的目录结构:
这段代码主体是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 保存文件
* &#