ti-enxame.com

Como obter o ID do arquivo para que eu possa fazer o download de um arquivo da API do Google Drive no Android?

Estou trabalhando em um projeto Android e estou tentando usar a API do Google Drive e tenho a maior parte dela funcionando, mas estou com um problema na forma como realizo um download.

Não consigo encontrar em nenhum lugar como obtenho o ID do arquivo para poder realizar o download. Para testar, recuperei todos os arquivos da minha conta de unidade e os adicionei a uma matriz de lista e, em seguida, obtive o ID do primeiro arquivo da lista.

Em seguida, copiei o ID do arquivo no comando para fazer o download do arquivo e isso funcionou com êxito, mas não tenho idéia de como obter o ID do arquivo específico que quero baixar.

Abaixo está o código que estou usando para baixar o arquivo.

private void downloadFile()
{
    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            try 
            {
                com.google.api.services.drive.model.File file = service.files().get("0B-Iak7O9SfIpYk9zTjZvY2xreVU").execute();
                //FileList file = service.files().list().execute();
                //List<com.google.api.services.drive.model.File> fileList = file.getItems();
                //com.google.api.services.drive.model.File fileItem = fileList.get(0);
                //Log.d("FileID" , fileItem.getId());
                //Log.d("Count", "Retreived file list");
                if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0)
                {
                    HttpResponse resp = service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
                    InputStream inputStream = resp.getContent();
                    writeToFile(inputStream);
                }
            } 
            catch (IOException e)
            {
                Log.e("WriteToFile", e.toString());
                e.printStackTrace();
            }
        }
    });
    thread.start();
}

0B-Iak7O9SfIpYk9zTjZvY2xreVU é o ID do arquivo que eu baixei, que recuperei quando fiz uma lista e selecionei o primeiro arquivo, mas como posso dizer que quero fazer o download do File_1 e obter o seu ID para depois passar isso para o serviço.get () .execute a função.

Basicamente, minha meta final está no meu aplicativo, carrego um arquivo XML no Google Drive e, posteriormente, baixe o arquivo. Será apenas um arquivo e sempre terá o mesmo nome. Estou fazendo isso imediatamente ou existe uma maneira melhor de conseguir o que estou tentando fazer?

19
Boardy

Bem, a primeira opção em que pude pensar é que você poderia enviar uma solicitação list com parâmetros de pesquisa para o seu arquivo, como title="File_1.xml" and fileExtension="xml". Ele retornará uma lista vazia de arquivos (não há um que corresponda aos critérios de pesquisa) ou retornará uma lista com pelo menos um arquivo. Se é apenas um - é fácil. Mas se houver mais, você terá que selecionar um deles com base em outros campos. Lembre-se de que no gdrive você pode ter mais de um arquivo com o mesmo nome. Portanto, quanto mais parâmetros de pesquisa você fornecer, melhor.

3
stan0

Na minha opinião, a maneira mais fácil e rápida de obter um ID de arquivo do Google Drive é pelo Google Drive na Web. Clique com o botão direito do mouse no nome do arquivo e selecione Obter link compartilhável. A última parte do link é o ID do arquivo. Então você pode cancelar o compartilhamento.

34
RomRoc

Este script registra todos os nomes de arquivos e IDs na unidade:

// Log the name and id of every file in the user's Drive
function listFiles() {
  var files = DriveApp.getFiles();
  while ( files.hasNext() ) {
    var file = files.next();
    Logger.log( file.getName() + ' ' + file.getId() );
  }
}  

Além disso, a página " Arquivos: lista " possui um formulário no final que lista os metadados de todos os arquivos na unidade, que podem ser usados ​​no caso de você precisar de apenas alguns IDs.

4
Juan Lanus

Uma maneira é associar propriedades exclusivas ao seu arquivo durante a criação.

properties = "{ \
    key='somekey' and \
    value='somevalue'
}"

então crie uma consulta.

query = "title = " + "\'" + title + "\'" + \
        AND + "mimeType = " + "\'" + mimeType + "\'" + \
        AND + "trashed = false" + \
        AND + "properties has " + properties

Todas as propriedades do arquivo (título, etc) já conhecidas por você podem ir aqui + propriedades.

4
Amber Kulkarni

Clique com o botão direito do mouse no arquivo no seu Google Drive. Escolha a opção para obter um link que pode ser compartilhado no menu. Você verá o ID do arquivo agora. Não se esqueça de desfazer o compartilhamento.

2
Marijn As

Se você souber o nome do arquivo e sempre desejar fazer o download desse arquivo específico, poderá obter facilmente o ID e outros atributos do arquivo desejado em: https://developers.google.com/ drive/v2/reference/files/list (na parte inferior, você encontrará uma maneira de executar consultas). No campo q, digite title = 'your_file_name' e execute-o. Você deve ver algum resultado aparecer logo abaixo e dentro dele deve haver um campo "id". Esse é o id que você está procurando.

Você também pode brincar com parâmetros adicionais em: https://developers.google.com/drive/search-parameters

1
user2510474

A idéia inicial de Stan0 não é uma boa idéia. Pode haver vários arquivos com o mesmo nome. Implementação muito propensa a erros. A segunda ideia de Stan0 é a maneira correta.

Quando você faz o upload do arquivo pela primeira vez no google drive, armazene seu ID (em SharedPreferences é provavelmente mais fácil) para uso posterior

ie.

file= mDrive.files().insert(body).execute();      //initial insert of file to google drive

whereverYouWantToStoreIt= file.getId(); //now you have the guaranteed unique id 
                                        //of the file just inserted. Store it and use it 
                                        //whenever you need to fetch this file
1
Ian