3

I have created code to insert file to google drive using services account in java .file is uploaded to the google drive but i cannot see it using web browser .when i check file using code i can retrieve the uploaded file .my question is how can i upload files to google drive that can be viewed by web browser using google services account in java

please find the sample code below.

      public class PlusServiceAccountSample {


          private static final String APPLICATION_NAME = "";

          /** E-mail address of the service account. */
          private static final String SERVICE_ACCOUNT_EMAIL = "XXXXXXXX@developer.gserviceaccount.com" ;

          /** Global instance of the HTTP transport. */
          private static HttpTransport httpTransport;

          /** Global instance of the JSON factory. */
          private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();


          public static void main(String[] args) {
            try {
              try {
                httpTransport = GoogleNetHttpTransport.newTrustedTransport();
                // check for valid setup
                if (SERVICE_ACCOUNT_EMAIL.startsWith("Enter ")) {
                  System.err.println(SERVICE_ACCOUNT_EMAIL);
                  System.exit(1);
                }
                String p12Content = Files.readFirstLine(new File("XXXXX-privatekey.p12"), Charset.defaultCharset());
                if (p12Content.startsWith("Please")) {
                  System.err.println(p12Content);
                  System.exit(1);
                }
                // service account credential (uncomment setServiceAccountUser for domain-wide delegation)
                GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                    .setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                    .setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
                    .setServiceAccountPrivateKeyFromP12File(new File("XXXXXXXX-privatekey.p12"))

                    .build();


                Drive service = new Drive.Builder(httpTransport, JSON_FACTORY,credential).build();

                com.google.api.services.drive.model.File  file = new com.google.api.services.drive.model.File();
                file.setTitle("testdd");
                file.setMimeType("application/vnd.google-apps.spreadsheet");
                Drive.Files.Insert insert = null;
                try {
                    insert = service.files().insert(file);
                    file = insert.execute();


                } catch (Exception e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }

                com.google.api.services.drive.model.File uploadedDoc = service.files().get("1ZJnkgFXAiUNSBeq3DmhHGqXn7-v37vLg1UsRekRQNjU").execute();

                System.out.println("Title: " + uploadedDoc.getTitle());




                return;
              } catch (IOException e) {
                System.err.println(e.getMessage());
              }
            } catch (Throwable t) {
              t.printStackTrace();
            }
            System.exit(1);
          }
Seth De
  • 417
  • 6
  • 18

2 Answers2

3

If you set permissions for the file, you can then see it in your regular gmail acount ("Shared with me" section):

Permission newPermission = new Permission();
newPermission.setValue("...your regular username...@gmail.com");
newPermission.setType("user");
newPermission.setRole("reader");
service.permissions().insert(file.getId(), newPermission).execute();

You can also use the unique url to get to the file:

System.out.println("Title: " + uploadedDoc.getTitle()+ " "+ uploadedDoc.getAlternateLink());

The possible values for Type and Role are in Google Drive SDK docs: https://developers.google.com/drive/v2/reference/permissions/insert

ebo
  • 2,717
  • 1
  • 27
  • 22
  • Thanks this works .i can see uploaded files in "shared with me" section .Is there any way we can directly upload files to the drive using google service account – Seth De Aug 17 '14 at 04:57
  • well, [Google Drive docs](https://developers.google.com/drive/web/service-accounts) says: _Service accounts are accounts associated with a service or a project. They do not belong to a user and can only be accessed programmatically by the associated application._ – Radoslav Balvan Aug 17 '14 at 06:54
  • Thanks .Is there any way we can directly upload files to google drive without userinteraction – Seth De Aug 18 '14 at 05:29
3
  1. Go to you Google Drive. Create some folder, and open "Sharing settings" for it.
  2. Add your service email to the list of allowed users and allow it to edit the contents of that folder.
  3. Remember folder ID somewhere and use this folder id while uploading files.
  4. It will be uploaded in your personal google drive account.