How to download a file from google drive using drive api java?

后端 未结 2 2074
半阙折子戏
半阙折子戏 2020-12-20 18:35

I have tried some functions of Google drive, but I couldn\'t able to download the file from Drive.

Here is the code which I used

private static Inpu         


        
相关标签:
2条回答
  • 2020-12-20 18:51

    This is what I created to download a file from gooogle drive hope it will help you.

    Please refer to this doc

    /** 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/n/drive-java-quickstart");
    
    /** 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
     */
    private static final java.util.Collection<String> SCOPES = DriveScopes
            .all();
    
    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 = Quickstart.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();
        // Print the names and IDs for up to 10 files.
        FileList result = service.files().list().execute();
        List<File> files = result.getFiles();
        if (files == null || files.size() == 0) {
            System.out.println("No files found.");
        } else {
    
            for (File file : files) {
    
                String fname = file.getName();
                String ex = fname.substring(fname.lastIndexOf(".") + 1);
    
                try {
                    Files f = service.files();
                    HttpResponse httpResponse = null;
                    if (ex.equalsIgnoreCase("xlsx")) {
                        httpResponse = f
                                .export(file.getId(),
                                        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
                                .executeMedia();
    
                    } else if (ex.equalsIgnoreCase("docx")) {
                        httpResponse = f
                                .export(file.getId(),
                                        "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
                                .executeMedia();
                    } else if (ex.equalsIgnoreCase("pptx")) {
                        httpResponse = f
                                .export(file.getId(),
                                        "application/vnd.openxmlformats-officedocument.presentationml.presentation")
                                .executeMedia();
    
                    } else if (ex.equalsIgnoreCase("pdf")
                            || ex.equalsIgnoreCase("jpg")
                            || ex.equalsIgnoreCase("png")) {
    
                        Get get = f.get(file.getId());
                        httpResponse = get.executeMedia();
    
                    }
                    if (null != httpResponse) {
                        InputStream instream = httpResponse.getContent();
                        FileOutputStream output = new FileOutputStream(
                                file.getName());
                        try {
                            int l;
                            byte[] tmp = new byte[2048];
                            while ((l = instream.read(tmp)) != -1) {
                                output.write(tmp, 0, l);
                            }
                        } finally {
                            output.close();
                            instream.close();
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-20 18:59

    Documents in Google Docs native formats won't have a downloadUrl field, instead you can export them using the exportLinks collection:

    https://developers.google.com/drive/manage-downloads#downloading_google_documents

    0 讨论(0)
提交回复
热议问题