google for rest angular google-api google-drive-sdk angular2-services

rest - for - google drive api angular



Cargue y asigne un nombre a un archivo mediante Google Drive REST API v3 y Angular 2 (3)

Estoy creando un servicio de Google Drive usando Drive REST Api v3 en Angular 2. La mayoría de las funcionalidades están en su lugar: ver archivo, descargar, crear etc. pero no puedo encontrar cómo nombrar un archivo (al crear un archivo) o actualización).

Estoy usando las siguientes páginas de documentación: crear y actualizar . Dicen que el nombre del archivo debe ser parte del cuerpo de la solicitud. El código relevante de mi servicio de Google Drive está abajo.

createFile(name :string, content :string) :Promise<Object> { let headers = new Headers({ ''Content-Type'': ''text/markdown'', ''Authorization'': ''Bearer '' + this.token, ''name'': name //TODO name not working! }); let options = new RequestOptions({ headers: headers }); // Create a request option return this.http .post(''https://www.googleapis.com/upload/drive/v3/files'' + ''?uploadType=multipart'', content, options) .toPromise(); } updateFile(id :string, content :string, name :string) :Promise<Object> { let headers = new Headers({ ''Content-Type'': ''text/markdown'', ''Authorization'': ''Bearer '' + this.token, ''id'': id, ''name'': name //TODO name not working! }); //generate headers let options = new RequestOptions({ headers: headers }); // Create a request option return this.http .patch(''https://www.googleapis.com/upload/drive/v3/files/'' + id + ''?uploadType=multipart'', content, options) .toPromise(); }

Para resumir los archivos se están creando y actualizando correctamente (incluido el contenido), pero el nombre y el cambio de nombre de un archivo no funciona en absoluto.

Gracias por cualquier ayuda.


Está tratando de establecer el nombre usando un encabezado http. Esto está mal. No puedo comenzar a entender cómo creía que era la forma de hacerlo, por lo que debe volver atrás y volver a leer la documentación de Drive API.

En resumen, el name: "name" debería ser un objeto JSON pasado en el cuerpo de la solicitud, no en un encabezado http.


Intente colocar el nombre en el cuerpo de la solicitud y no en el encabezado de la solicitud como se describe en los archivos: crear :

Solicitar cuerpo

  • En el cuerpo de la solicitud, proporcione un recurso de Archivos con las siguientes propiedades como metadatos. Para obtener más información, consulte el documento sobre carga de medios .

Para probarlo, intente utilizar API Explorer para ayudarlo a explorar varias API de Google interactivamente.

Solicitud de muestra:

POST https://www.googleapis.com/drive/v3/files?key={YOUR_API_KEY} { "name": "My File" }

Respuesta:

200 { "kind": "drive#file", "id": "fileID", "name": "My File" }

También hay una publicación SO relacionada que explica cómo insertar archivos en Google Drive a través de API.

Espero que esto ayude.


También me enfrenté a ese problema. Creo que hay 3 soluciones:

  1. Utilice multipart upload varias multipart upload https://developers.google.com/drive/v3/web/multipart-upload con encabezados diferentes para metadatos de archivos y archivos reales. Yo mismo me quedé allí, no encontré cómo agregar límites a encabezados de solicitud separados en Angular 2+

  2. Subir archivo en dos solicitudes. Primero para crear un archivo vacío con metadatos (la respuesta proporcionará el id del archivo) y el segundo para realmente "actualizar" el archivo.

  3. Use la resumable upload . Primero solicite "configurar metadatos" (ni siquiera creará un archivo vacío) y obtenga un "enlace especial" donde enviar la solicitud para cargar el archivo real. Y este enfoque tiene otras características, como cargar en trozos. https://developers.google.com/drive/v3/web/resumable-upload

Aquí está el enlace a otra pregunta con implementación de carga reanudable en Angular 2 y DRIVE REST API V3

Angular 2+ HTTP POST y GDrive API. Carga de archivos reanudables con nombre

Espero que pueda ser útil.