google files google-drive-sdk google-drive-api

google drive sdk - files - Migración de la API de Google Drive v3



google drive json api (2)

Decidí migrar de Google Drive API v2 a v3 y no fue una tarea fácil. Aunque Google escribió esta documentation , hay muchas lagunas y no hay mucha información sobre esto en la web.

Estoy compartiendo aquí lo que he encontrado.


No tengo la reputación de comentar (lo siento), pero la línea de código proporcionada en la respuesta aceptada, service.about().get().setFields("user, storageQuota").execute() , no se ejecuta , en su lugar, arroja un error de atributo:

about = service.about().get().setFields("user", "storageQuota").execute() AttributeError: ''HttpRequest'' object has no attribute ''setFields''

En cambio, la línea debería leer:

service.about().get(fields = "user, storageQuota").execute()


Primero, lea los documentos oficiales: documentation

Descargar

Download ha cambiado. El campo downloadUrl ya no existe. Ahora, se puede lograr con esto:

service.files().get(fileId).executeMediaAndDownloadTo(outputStream);

webContentLink el nuevo campo webContentLink pero devuelve contenido HTML, en lugar del contenido del archivo. En otras palabras, le proporciona el enlace a la interfaz de usuario web de Drive.

Subir

Cargar solo requiere cambiar la insert palabras para create , nada más.

Papelera / Actualización

Perdí algo de tiempo con este 😔. Solía ​​ser un simple service.files().trash(fileId).execute() . Los doctores dicen

files.trash -> files.update con {''trashed'': true}

El código de ejemplo para la update en v2 obtiene una entrada en el archivo, establece nuevos valores y luego llama a la update .

En v3, el uso de una update como esa genera esta excepción:

{ "code" : 403, "errors" : [ { "domain" : "global", "message" : "The resource body includes fields which are not directly writable.", "reason" : "fieldNotWritable" } ], "message" : "The resource body includes fields which are not directly writable." }

La solución es crear un File vacío configurando solo los nuevos valores:

File newContent = new File(); newContent.setTrashed(true); service.files().update(fileId, newContent).execute();

Nota: El File refiere a com.google.api.services.drive.model.File (no es java.io.File ).

Lista

Los archivos devueltos por service.files().list() no contienen información ahora, es decir, cada campo es nulo. Si desea que la list en v3 se comporte como en v2, llámela así:

service.files().list().setFields("nextPageToken, files");

Los documentos de Búsqueda de archivos usan setFields("nextPageToken, files(id, name)") pero no hay documentación sobre cómo obtener toda la información de un archivo. Ahora ya sabes, solo incluye "archivos".

Campos

Los recursos completos ya no se devuelven de forma predeterminada. Use el parámetro de consulta de fields para solicitar que se devuelvan campos específicos. Si se deja sin especificar, solo se devuelve un subconjunto de campos de uso común.

Esa última parte no es totalmente cierta, ya que en algunos casos estás obligado a usar setFields . Por ejemplo, si usa service.about().get().execute() obtendrá este error:

"The ''fields'' parameter is required for this method."

que se resuelve llamando a service.about().get().setFields("user, storageQuota").execute() , por ejemplo.

Al final de los documentos se menciona como:

El parámetro de consulta de fields debe especificarse para los métodos que devuelven

Para el resto de los cambios, solo siga la tabla de Google en los documentos.