2017-11-17 12 views
0

私は、ユーザーの要求に応じてファイルをGoogleドライブにアップロードできるAndroid搭載アプリケーションを構築しようとしています。しかし、私は単一の実例をどこにも見つけることができません。ここにあちこちに散らばった半分の小片があります。彼らの中にはOAuthで接続できるものもあれば、空のファイルやフォルダを作るものもありますが、どこにでもトークンを保存してファイルをシームレスにアップロードできるアプリはありません。私は本やビデオが利用できないので機能を実装する方法については無知です、Googleのサンプルは私のためには機能しません。私はコードを動作させるのに苦労しています。助けてください。ありがとう。GoogleドライブAPIファイルのアップロードに関する問題

+2

「コードを作成するのに苦労しています。 –

+0

私はコードを何らかの形で利用可能なスニペットを使って動作させるために書いてきましたが、まだ動作していません。私はそれを投稿することはできません。それはまったく大きな混乱です。 –

+0

そして、私たちはあなたのコードを**想像するはずですか?良い一日を。 –

答えて

0

Googleドライブサービスを作成する際は、常に以下のクラスを使用します。

あなたのポンポンファイルにこれらの依存関係を持っている必要があります:まず

<dependency> 
    <groupId>com.google.api-client</groupId> 
    <artifactId>google-api-client</artifactId> 
    <version>1.23.0</version> 
</dependency> 
<dependency> 
    <groupId>com.google.oauth-client</groupId> 
    <artifactId>google-oauth-client-jetty</artifactId> 
    <version>1.23.0</version> 
</dependency> 
<dependency> 
    <groupId>com.google.apis</groupId> 
    <artifactId>google-api-services-drive</artifactId> 
    <version>v2-rev282-1.23.0</version> 
</dependency> 

次にドライブAPIクライアントのインスタンスを作成するには、このクラスを使用します。

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.JsonFactory; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.client.util.store.FileDataStoreFactory; 
import com.google.api.services.drive.Drive; 
import com.google.api.services.drive.DriveScopes; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.security.GeneralSecurityException; 
import java.util.Arrays; 
import java.util.List; 

/** 
* 
* @author jalal-sordo 
*/ 
public class GoogleDriveServiceFactory { 

    private String applicationName; 

    private JsonFactory jsonFactory; 
    private HttpTransport googleDriveHttpTransport; 
    private List<String> googleDriveApiScopes; 
    private String googleDriveClientSecretFilePath; 
    private FileDataStoreFactory credentialsStoreFolder; 

    public GoogleDriveServiceFactory(ApplicationParameters params) { 
     try { 
      this.googleDriveClientSecretFilePath = params.getGoogleDriveClientSecretFilePath(); 
      // = new FileInputStream(googleDriveClientSecretFilePath); 
      applicationName = "someApplicationName"; 
      jsonFactory = JacksonFactory.getDefaultInstance(); 
      googleDriveApiScopes = Arrays.asList(DriveScopes.DRIVE); 
      googleDriveHttpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
      java.io.File googleDriveCredentialsStore = new java.io.File(params.getGoogleDriveCredentialsFolderPath()); 
      credentialsStoreFolder = new FileDataStoreFactory(googleDriveCredentialsStore); 
     } catch (IOException | GeneralSecurityException t) { 
      System.err.println(t.getMessage()); 
      System.exit(1); 
     } 
    } 

    public Credential authorize() throws IOException { 
     InputStreamReader streamReader = new FileReader(new java.io.File(googleDriveClientSecretFilePath)); 
     GoogleClientSecrets clientSecrets 
       = GoogleClientSecrets.load(jsonFactory, streamReader); 
     // Build flow and trigger user authorization request. 
     GoogleAuthorizationCodeFlow flow 
       = new GoogleAuthorizationCodeFlow.Builder(
         googleDriveHttpTransport, jsonFactory, clientSecrets, googleDriveApiScopes) 
         .setDataStoreFactory(credentialsStoreFolder) 
         .setAccessType("offline") 
         .build(); 
     Credential credential = new AuthorizationCodeInstalledApp(
       flow, new LocalServerReceiver()).authorize("user"); 

     return credential; 
    } 

    public Drive getDriveService() throws IOException { 
     Credential credential = authorize(); 
     return new Drive.Builder(
       googleDriveHttpTransport, jsonFactory, credential) 
       .setApplicationName(applicationName) 
       .build(); 
    } 
} 

ます。また、このクラスが必要になります上記のクラスにパラメータを指定してください:

/** 
* 
* @author jalal-sordo 
*/ 
public class ApplicationParameters { 

    private String googleDriveCredentialsFolderPath; 
    private String googleDriveClientSecretFilePath; 

    public String getGoogleDriveCredentialsFolderPath() { 
     return googleDriveCredentialsFolderPath; 
    } 

    public void setGoogleDriveCredentialsFolderPath(String googleDriveCredentialsFolderPath) { 
     this.googleDriveCredentialsFolderPath = googleDriveCredentialsFolderPath; 
    } 

    public String getGoogleDriveClientSecretFilePath() { 
     return googleDriveClientSecretFilePath; 
    } 

    public void setGoogleDriveClientSecretFilePath(String googleDriveClientSecretFilePath) { 
     this.googleDriveClientSecretFilePath = googleDriveClientSecretFilePath; 
    } 

    @Override 
    public String toString() { 
     return "ApplicationParameters{" 
       + "\ngoogleDriveCredentialsFolderPath = " + googleDriveCredentialsFolderPath 
       + "\ngoogleDriveClientSecretFilePath = " + googleDriveClientSecretFilePath 
       + "\n}"; 
    } 

} 

これはあなたが作成する方法ですGoogleDriveServiceFactoryのインスタンスを作成し、ファイルアップロードを実行します。

ApplicationParameters params = new ApplicationParameters(); 
//this is where you specify where you want the credentials to be stored 
//after a successful autherization is made from the browser (this code will 
//open the authorization consent page on your default browser). 
params.setGoogleDriveCredentialsFolderPath("/path/to/credentials/folder"); 
//this is the path to your client_id that you downloaded from google cloud 
//console credentials page. 
params.setGoogleDriveClientSecretFilePath("/path/to/client_id.json"); 
GoogleDriveServiceFactory driveFactory = new GoogleDriveServiceFactory (params); 

File fileMetadata = new File(); 
fileMetadata.setName("photo.jpg"); 
java.io.File filePath = new java.io.File("files/photo.jpg"); 
FileContent mediaContent = new FileContent("image/jpeg", filePath); 
File file = driveFactory.getDriveService.files().create(fileMetadata, mediaContent) 
    .setFields("id") 
    .execute(); 
System.out.println("File ID: " + file.getId()); 
+1

OK努力してくれてありがとう!私はそれを動作させるようにしようとします。 –

+0

問題はありませんが、あなたがこの答えを見つけた場合は、受け入れて投票してください。 –

+0

それはあなたのために働いたのですか? –

関連する問題