使用 java 将文件从 google 应用程序引擎上传到 google 驱动器

Upload file from google app engine to google drive using java

我已成功从电子邮件收到 pdf 文件,但我必须将该 PDF 文件存储到 google drive.here 是我的代码

private static void uploadFile(InputStream is) {

             com.google.api.services.drive.model.File fileMetadata = new com.google.api.services.drive.model.File();
             fileMetadata.setTitle(fileName);
             fileMetadata.setMimeType("application/pdf");

             HttpTransport httpTransport = new NetHttpTransport();
             JsonFactory jsonFactory = new JacksonFactory();
             AppIdentityCredential credential = new AppIdentityCredential.Builder(Arrays.asList(DriveScopes.DRIVE)).build();
             // API_KEY is from the Google Console as a server API key
             GoogleClientRequestInitializer keyInitializer = new CommonGoogleClientRequestInitializer("My API_key here");
             Drive service = new Drive.Builder(httpTransport, jsonFactory, null)

                 .setApplicationName("My app name here")
                 .setHttpRequestInitializer(credential)
                 .setGoogleClientRequestInitializer(keyInitializer)
                 .build();

             try {
                Drive.Files.Insert in= service.files().insert(fileMetadata, new InputStreamContent("application/pdf",is));
                com.google.api.services.drive.model.File retFile =in.execute();
                if(retFile!=null){
                    System.out.println("Drive retFile:"+retFile.getTitle());    
                }
            } catch (IOException e) {
                System.out.println("Drive Error:"+e.toString());
            }
          }

我检查了关联的帐户Google没有上传任何驱动器。

而且我已经 googled 过去 1 周了,我没有找到任何明确的文件从 GAE 上传文件到 google dive。

提前致谢...

我终于找到了解决方案,首先我们需要了解 GAE 服务帐户和关联的 Google 帐户有单独的驱动器存储。

我上面的代码将文件存储到 GAE 服务帐户驱动器(没有 UI 的服务帐户),因此我们关联的 Google 帐户看不到它。

所以我们需要分享服务账号文件给关联Google account.Here是我修改的代码

private static void uploadFile(InputStream is) {

            com.google.api.services.drive.model.File fileMetadata = new com.google.api.services.drive.model.File();
            fileMetadata.setTitle(curDateWithFormat()+"-"+fileName);
            fileMetadata.setMimeType("application/pdf");


             HttpTransport httpTransport = new NetHttpTransport();
             JsonFactory jsonFactory = new JacksonFactory();
             AppIdentityCredential credential = new AppIdentityCredential.Builder(Arrays.asList(DriveScopes.DRIVE)).build();
             // API_KEY is from the Google Console as a server API key
             GoogleClientRequestInitializer keyInitializer = new CommonGoogleClientRequestInitializer("AIzaSyCKLTs_D2zYJepjno8OSVy-2CItYayvu0M");
             Drive service = new Drive.Builder(httpTransport, jsonFactory, null)

                 .setApplicationName("TimesheetPDFParser")
                 .setHttpRequestInitializer(credential)
                 .setGoogleClientRequestInitializer(keyInitializer)
                 .build();

             try {
                Drive.Files.Insert in= service.files().insert(fileMetadata, new InputStreamContent("application/pdf",is));
                com.google.api.services.drive.model.File retFile =in.execute();

                if(retFile!=null){
                    Permission newPermission = new Permission();
                    newPermission.setValue("here your email id @gmail.com");
                    newPermission.setType("user");
                    newPermission.setRole("reader");//owner and writer role throws 400 BAD_REQUEST exception    
                    service.permissions().insert(retFile.getId(), newPermission).execute();

                    System.out.println("Drive retFile:"+retFile.getId());   
                }
            } catch (IOException e) {
                System.out.println("Drive Error:"+e.toString());
            }
          }    

现在您可以在“与我共享”选项中的共享帐户驱动器中看到您的文件。

引用自:

https://developers.google.com/drive/v2/reference/permissions/insert