Nach Dateien und Ordnern suchen

Die Google Drive API unterstützt mehrere Möglichkeiten, Dateien und Ordner zu suchen.

Mit der Methode files.list können Sie alle oder einige der Dateien und Ordner eines Drive-Nutzers zurückgeben. Mit der Methode files.list können Sie auch die fileId abrufen, die für einige Ressourcenmethoden erforderlich ist, z. B. files.get und files.update.

Nach allen Dateien und Ordnern im Ordner „Meine Ablage“ des aktuellen Nutzers suchen

Wenn Sie alle Dateien und Ordner zurückgeben möchten, verwenden Sie die Methode files.list ohne Parameter.

GET https://www.googleapis.com/drive/v3/files

Nach bestimmten Dateien oder Ordnern in „Meine Ablage“ des aktuellen Nutzers suchen

Wenn Sie nach einer bestimmten Gruppe von Dateien oder Ordnern suchen möchten, verwenden Sie das Abfragestringfeld q mit der Methode files.list, um die zurückzugebenden Dateien durch Kombinieren eines oder mehrerer Suchbegriffe zu filtern.

Ein Suchstring besteht aus den folgenden drei Teilen:

query_term operator values

Wobei:

  • query_term ist der Suchbegriff oder das Suchfeld.

  • operator gibt die Bedingung für den Suchbegriff an.

  • values sind die Werte, mit denen Sie Ihre Suchergebnisse filtern möchten.

Informationen zu den Suchbegriffen und Operatoren, die Sie für Filterdateien und -ordner verwenden können, finden Sie unter Suchbegriffe und -operatoren.

Im folgenden Suchstring wird beispielsweise der MIME-Typ festgelegt, um die Suche so zu filtern, dass nur Ordner zurückgegeben werden:

q: mimeType = 'application/vnd.google-apps.folder'

Weitere Informationen zu MIME-Typen finden Sie unter Von Google Workspace und Google Drive unterstützte MIME-Typen.

Beispiele für Abfragestrings

In der folgenden Tabelle sind Beispiele für einige grundlegende Suchstrings aufgeführt. Der tatsächliche Code unterscheidet sich je nach der Clientbibliothek, die Sie für die Suche verwenden.

Außerdem müssen Sie Sonderzeichen in den Dateinamen mit Escapezeichen versehen, damit die Abfrage ordnungsgemäß funktioniert. Wenn ein Dateiname beispielsweise sowohl ein Apostroph (') als auch einen umgekehrten Schrägstrich ("\") enthält, müssen Sie beide Zeichen mit einem umgekehrten Schrägstrich maskieren: name contains 'quinn\'s paper\\essay'.

Was Sie abfragen möchten Beispiel
Dateien mit dem Namen „hallo“ name = 'hello'
Dateien mit einem Namen, der die Wörter „Hallo“ und „Auf Wiedersehen“ enthält name contains 'hello' and name contains 'goodbye'
Dateien, deren Name nicht das Wort „hallo“ enthält not name contains 'hello'
Dateien, die den Text „wichtig“ enthalten und sich im Papierkorb befinden fullText contains 'important' and trashed = true
Dateien, die das Wort „Hallo“ enthalten fullText contains 'hello'
Dateien, die nicht das Wort „Hallo“ enthalten not fullText contains 'hello'
Dateien, die genau den Ausdruck „hallo welt“ enthalten fullText contains '"hello world"'
Dateien mit einer Abfrage, die das Zeichen „"“ enthält (z. B. „\authors“) fullText contains '\\authors'
Dateien, die Ordner sind mimeType = 'application/vnd.google-apps.folder'
Dateien, die keine Ordner sind mimeType != 'application/vnd.google-apps.folder'
Dateien, die nach einem bestimmten Datum geändert wurden (Standardzeitzone ist UTC) modifiedTime > '2012-06-04T12:00:00'
Bild- oder Videodateien, die nach einem bestimmten Datum geändert wurden modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
Markierte Dateien starred = true
Dateien innerhalb einer Sammlung (z. B. die Ordner-ID in der Sammlung parents) '1234567' in parents
Dateien in einem Ordner mit Anwendungsdaten in einer Sammlung 'appDataFolder' in parents
Dateien, deren Eigentümer der Nutzer „test@beispiel.de“ ist 'test@example.org' in owners
Dateien, für die der Nutzer „test@beispiel.de“ Schreibberechtigung hat 'test@example.org' in writers
Dateien, für die Mitglieder der Gruppe „group@beispiel.de“ Schreibberechtigungen haben 'group@example.org' in writers
Für den autorisierten Nutzer freigegebene Dateien mit dem Namen „hallo“ sharedWithMe and name contains 'hello'
Dateien mit einer benutzerdefinierten Dateieigenschaft, die für alle Apps sichtbar ist properties has { key='mass' and value='1.3kg' }
Dateien mit einer benutzerdefinierten Dateieigenschaft, die nur für die anfragende App sichtbar ist appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
Dateien, die für niemanden oder Domains freigegeben wurden (nur privat oder für bestimmte Nutzer oder Gruppen freigegeben) visibility = 'limited'

Suchergebnisse mit einer Clientbibliothek filtern

Das folgende Codebeispiel zeigt, wie Sie Suchergebnisse mithilfe einer Clientbibliothek nach Dateinamen und IDs von JPEG-Dateien filtern. In diesem Beispiel wird der Abfragebegriff mimeType verwendet, um die Ergebnisse auf Dateien vom Typ image/jpeg einzuschränken. Außerdem wird spaces auf drive festgelegt, um die Suche weiter auf den Drive-Speicherplatz einzugrenzen. Wenn nextPageToken null zurückgibt, gibt es keine weiteren Ergebnisse.

Java

drive/snippets/drive_v3/src/main/java/SearchFile.java
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* Class to demonstrate use-case of search files. */
public class SearchFile {

  /**
   * Search for specific set of files.
   *
   * @return search result list.
   * @throws IOException if service account credentials file not found.
   */
  public static List<File> searchFile() throws IOException {
           /*Load pre-authorized user credentials from the environment.
           TODO(developer) - See https://developers.google.com/identity for
           guides on implementing OAuth2 for your application.*/
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    List<File> files = new ArrayList<File>();

    String pageToken = null;
    do {
      FileList result = service.files().list()
          .setQ("mimeType='image/jpeg'")
          .setSpaces("drive")
          .setFields("nextPageToken, items(id, title)")
          .setPageToken(pageToken)
          .execute();
      for (File file : result.getFiles()) {
        System.out.printf("Found file: %s (%s)\n",
            file.getName(), file.getId());
      }

      files.addAll(result.getFiles());

      pageToken = result.getNextPageToken();
    } while (pageToken != null);

    return files;
  }
}

Python

drive/snippets/drive-v3/file_snippet/search_file.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def search_file():
  """Search file in drive location

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)
    files = []
    page_token = None
    while True:
      # pylint: disable=maybe-no-member
      response = (
          service.files()
          .list(
              q="mimeType='image/jpeg'",
              spaces="drive",
              fields="nextPageToken, files(id, name)",
              pageToken=page_token,
          )
          .execute()
      )
      for file in response.get("files", []):
        # Process change
        print(f'Found file: {file.get("name")}, {file.get("id")}')
      files.extend(response.get("files", []))
      page_token = response.get("nextPageToken", None)
      if page_token is None:
        break

  except HttpError as error:
    print(f"An error occurred: {error}")
    files = None

  return files


if __name__ == "__main__":
  search_file()

Node.js

drive/snippets/drive_v3/file_snippets/search_file.js
/**
 * Search file in drive location
 * @return{obj} data file
 * */
async function searchFile() {
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const files = [];
  try {
    const res = await service.files.list({
      q: 'mimeType=\'image/jpeg\'',
      fields: 'nextPageToken, files(id, name)',
      spaces: 'drive',
    });
    Array.prototype.push.apply(files, res.files);
    res.data.files.forEach(function(file) {
      console.log('Found file:', file.name, file.id);
    });
    return res.data.files;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveSearchFiles.php
use Google\Client;
use Google\Service\Drive;
function searchFiles()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $files = array();
        $pageToken = null;
        do {
            $response = $driveService->files->listFiles(array(
                'q' => "mimeType='image/jpeg'",
                'spaces' => 'drive',
                'pageToken' => $pageToken,
                'fields' => 'nextPageToken, files(id, name)',
            ));
            foreach ($response->files as $file) {
                printf("Found file: %s (%s)\n", $file->name, $file->id);
            }
            array_push($files, $response->files);

            $pageToken = $response->pageToken;
        } while ($pageToken != null);
        return $files;
    } catch(Exception $e) {
       echo "Error Message: ".$e;
    }
}

Nach Dateien mit einer benutzerdefinierten Dateieigenschaft suchen

Wenn Sie nach Dateien mit einer benutzerdefinierten Dateieigenschaft suchen möchten, verwenden Sie entweder den Suchbegriff properties oder appProperties mit einem Schlüssel und einem Wert. So suchen Sie beispielsweise nach einem benutzerdefinierten Dateiattribut, das für die anfragende App privat ist und den Namen additionalID mit dem Wert 8e8aceg2af2ge72e78 hat:

appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }

Weitere Informationen finden Sie unter Benutzerdefinierte Dateieigenschaften hinzufügen.

Nach Dateien mit einem bestimmten Label oder Feldwert suchen

Wenn Sie nach Dateien mit bestimmten Labels suchen möchten, verwenden Sie den Suchbegriff labels mit einer bestimmten Label-ID. Beispiel: 'labels/LABEL_ID' in labels Wenn der Vorgang erfolgreich ist, enthält der Antworttext alle Dateiinstanzen, auf die das Label angewendet wurde.

So suchen Sie nach Dateien ohne eine bestimmte Label-ID: Not 'labels/LABEL_ID' in labels.

Sie können auch nach Dateien suchen, die bestimmte Feldwerte enthalten. Wenn Sie beispielsweise nach Dateien mit einem Textwert suchen möchten, geben Sie labels/LABEL_ID.text_field_id ='TEXT' ein.

Weitere Informationen finden Sie unter Nach Dateien mit einem bestimmten Label oder Feldwert suchen.

In den Korpora suchen

Bei Suchanfragen, die files.list aufrufen, wird standardmäßig das corpora von user verwendet. Wenn Sie in anderen Corpora suchen möchten, z. B. in Dateien, die für eine domain freigegeben wurden, legen Sie den Parameter corpora fest.

In einer einzigen Abfrage können mehrere Corpora durchsucht werden. Wenn die kombinierten Corpora jedoch zu groß sind, werden möglicherweise unvollständige Ergebnisse zurückgegeben. Wenn incompleteSearch im Antworttext true ist, wurden nicht alle Dokumente zurückgegeben. In diesem Fall sollten Sie Ihre Abfrage eingrenzen, indem Sie einen anderen Korpora wie user oder drive auswählen.