从java将本地文件上传到Google驱动器

时间:2016-03-09 06:12:53

标签: java gradle google-drive-api

我正在尝试将本地文本文件从java和gradle上传到驱动器中。我继续收到以下错误。

  1. 无法找到符号导入com.google.api.services.drive.model.ParentReference;
  2. 错误:找不到符号body.setTitle(“我的文件标题”);
  3. 找不到符号Arrays.asList(new ParentReference()。setId(parentId)));
  4. 找不到符号文件file = service.files()。insert(body,mediaContent).execute();
  5. 似乎是导入错误,但我使用的是gradle 2.3,所以不知道这是怎么回事。

    import com.google.api.client.auth.oauth2.Credential;
    import  com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp ;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.client.http.FileContent;
    
    import com.google.api.services.drive.DriveScopes;
    import com.google.api.services.drive.model.*;
    import com.google.api.services.drive.*;
    import com.google.api.services.drive.model.ParentReference;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.List;
    
    public class DriveQuickstart {
        /** Application name. */
        private static final String APPLICATION_NAME =
            "Drive API Java Quickstart";
    
        /** Directory to store user credentials for this application. */
        private static final java.io.File DATA_STORE_DIR = new java.io.File(
            System.getProperty("user.home"), ".credentials/drive-java-quickstart.json");
    
        /** Global instance of the {@link FileDataStoreFactory}. */
        private static FileDataStoreFactory DATA_STORE_FACTORY;
    
        /** Global instance of the JSON factory. */
        private static final JsonFactory JSON_FACTORY =
            JacksonFactory.getDefaultInstance();
    /** Global instance of the HTTP transport. */
    private static HttpTransport HTTP_TRANSPORT;
    
    /** Global instance of the scopes required by this quickstart.
     *
     * If modifying these scopes, delete your previously saved credentials
     * at ~/.credentials/drive-java-quickstart.json
     */
    private static final List<String> SCOPES =
        Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY);
    
    static {
        try {
            HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
            DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        } catch (Throwable t) {
            t.printStackTrace();
            System.exit(1);
        }
    }
    
    /**
     * Creates an authorized Credential object.
     * @return an authorized Credential object.
     * @throws IOException
     */
    public static Credential authorize() throws IOException {
        // Load client secrets.
        InputStream in =
            DriveQuickstart.class.getResourceAsStream("/client_secret.json");
        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(DATA_STORE_FACTORY)
                .setAccessType("offline")
                .build();
        Credential credential = new AuthorizationCodeInstalledApp(
            flow, new LocalServerReceiver()).authorize("user");
        System.out.println(
                "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
        return credential;
    }
    
    /**
     * Build and return an authorized Drive client service.
     * @return an authorized Drive client service
     * @throws IOException
     */
    public static Drive getDriveService() throws IOException {
        Credential credential = authorize();
        return new Drive.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .build();
    }
    
    public static void main(String[] args) throws IOException {
        // Build a new authorized API client service.
        Drive service = getDriveService();
     // File's metadata.
    File body = new File();
    body.setTitle("My File Title");
    body.setDescription("My File Description");
    body.setMimeType("text/plain");
    
    String parentId = "ParentDir";
    
    // Set the parent folder.
    if (parentId != null && parentId.length() > 0) {
      body.setParents(
          Arrays.asList(new ParentReference().setId(parentId)));
    }
    
    String filename = "Resources/myfile.txt";
    
    
    java.io.File fileContent = new java.io.File(filename);
    FileContent mediaContent = new FileContent("text/plain", fileContent);
    try {
      File file = service.files().insert(body, mediaContent).execute();
    
      System.out.println("Inserted File ID: " + file.getId());
    
    } catch (IOException e) {
    
      System.out.println("An error occured: " + e);
    
    }
    }
    
    
    
     }
    

    提前致谢!!

1 个答案:

答案 0 :(得分:1)

我很确定您使用的是v2 Google Drive API代码,但是您要包含v3 gradle / jar文件,反之亦然,因为它提供错误的唯一功能是insert,setType ...版本已更改3来创建,setName ...