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:
Utilice
multipart upload
variasmultipart 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+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.
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.