Я разрабатываю приложение с весенней загрузкой, которому необходимо загружать файлы в учетную запись Google Диска. Я нашел ветку для хранения access_token и токена обновления, но она устарела, вот ссылка: Как локально хранить учетные данные для SDK Google Диска. Есть ли способ использовать v3 для однократной реализации аутентификации Google Диска и обновления токена доступа при необходимости?
Ниже показан сервис, загружающий файлы на диск
@Service
public class GoogleDriveService {
private static final String baseConfigPath = "/config.json";
private static final String APPLICATION_NAME = "application name";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE);
private static final String CREDENTIALS_FILE_PATH = "/client_secret.json";
/////////////////////////////////////////////////////////////////////////////////////////
public static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = GoogleDriveClient.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setHost("127.0.0.1").setPort(8089).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}
public boolean uploadGoogleDriveFile(java.io.File originalFile){
final NetHttpTransport HTTP_TRANSPORT;
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
File file = new File();
file.setName(originalFile.getName());
FileContent content = new FileContent("text/plain", originalFile);
File uploadedFile = service.files().create(file, content).setFields("id").execute();
System.out.println("File ID: " + uploadedFile.getId());
return true;
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
return false;
}
}
}