Google 驱动器 API 存储 java 的凭据

Google drive API store credentials for java

我正在开发一个 spring-boot 应用程序,需要将文件上传到 Google 云端硬盘帐户。我找到了一个用于存储 access_token 和刷新令牌的线程,但已被弃用,这里是 link:How to store credentials for Google Drive SDK locally。 有没有办法使用 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;
        }
    }
}

像这样的东西应该是您正在寻找的东西,它应该为您为用户存储信誉。

/**
 * A simple example of how to access the Google Drive API.
 */
public class HelloDrive {
  // Path to client_secrets.json file downloaded from the Developer's Console.
  // The path is relative to HelloDrive.java.
  private static final String CLIENT_SECRET_JSON_RESOURCE = "client_secrets.json";

  // Replace with your view ID.
  private static final String VIEW_ID = "<REPLACE_WITH_VIEW_ID>";

      // The directory where the user's credentials will be stored.
      private static final File DATA_STORE_DIR = new File(
          System.getProperty("user.home"), ".store/hello_drive");
    
      private static final String APPLICATION_NAME = "Hello Google drive";
      private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
      private static NetHttpTransport httpTransport;
      private static FileDataStoreFactory dataStoreFactory;
    
      public static void main(String[] args) {
        try {
          Drive service = initializeDrive();
    
          
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
   /**
   * Initializes an authorized Drive service object.
   *
   * @return The Drive service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static Drive initializeDrive() throws GeneralSecurityException, IOException {

    httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

    // Load client secrets.
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
        new InputStreamReader(HelloDrive.class
            .getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE)));

    // Set up authorization code flow for all authorization scopes.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
        .Builder(httpTransport, JSON_FACTORY, clientSecrets,
            DriveScopes.all()).setDataStoreFactory(dataStoreFactory)
        .build();

    // Authorize.
    Credential credential = new AuthorizationCodeInstalledApp(flow,
        new LocalServerReceiver()).authorize("user");
    // Construct the Drive service object.
    return new Drive.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

基于 Google Analtyics 样本