google for example docs google-drive-sdk

google-drive-sdk - for - google drive sdk javascript



Enlaces permanentes a miniaturas en la API de Google Drive (3)

Estoy usando Google Drive API (PHP) para subir algunas fotos a mi unidad. Cuando se carga un archivo, se Google_DriveFile un objeto Google_DriveFile en la respuesta para confirmar la transferencia exitosa. Incluye un campo llamado thumbnailLink , accesible a través del getThumbnailLink getter. Su contenido puede verse así:

https://lh4.googleusercontent.com/dqVdU195R4_0ZtWxsJlhW1Fr2K30xa2hH3V1KV4UrTBl9QkhOSR0ZqN9HoB-TjEQv8SIJw=s220

Hasta hoy, estaba seguro de que el enlace no cambia por sí solo con el tiempo. Sin embargo, cuando traté de mostrar una miniatura de una foto que tengo en mi unidad, usando una dirección almacenada en caché que guardo en mi base de datos local, recibí un error 403, puede verlo en el enlace mencionado. Le pedí al API el enlace actual a la miniatura y ahora es completamente diferente.

Me pasó solo una vez, pero para varios archivos, es decir, todos los archivos que tenía en mi unidad de repente obtuvieron nuevos enlaces en miniatura.

¿Hay alguna manera de recuperar rápidamente una miniatura de un documento (preferiblemente, una foto) por algún valor constante o para asegurarse de que no cambie? La solución perfecta sería acceder a la miniatura debajo de un enlace que incluye la id del documento en lugar de un hash que puede cambiar.


He revisado la documentación de la API tal como me han proporcionado:

Importante : las miniaturas se invalidan cada vez que cambia el contenido del archivo. Al suministrar miniaturas, es importante subir nuevas miniaturas cada vez que se modifique el contenido.

De acuerdo con la información, significa que una nueva miniatura solo se genera cuando los contenidos del archivo se modifican. Pero en su caso, es algo realmente usado y los contenidos no se cambian, pero se cambian las miniaturas. A partir de la documentación, no hay ningún proceso por lotes disponible, pero se puede encontrar otro camino, es decir, Web Hook.

De acuerdo con la Documentación, hay un gancho web disponible, es decir, Files:Watch proceso a través del cual se puede rastrear los cambios que se realizan en el archivo. Por lo tanto, significa que cada vez que se cambian los contenidos, se ejecutará el enlace y podrá cambiar el caché de la miniatura de la imagen.

Se puede enviar una solicitud HTTP para solicitar que se vea cómo cambian los archivos

POST https://www.googleapis.com/drive/v2/files/fileId/watch

Aquí fileID significa la identificación proporcionada después de cargar el archivo.

En el cuerpo de solicitud, proporcione datos con la siguiente estructura:

id ==> string (A UUID or similar unique string that identifies this channel.) token# ==> string (An arbitrary string delivered to the target address with each notification delivered over this channel). expiration# => long (Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds.) type ==> string (The type of delivery mechanism used for this channel. The only option is web_hook.) address => string (The address where notifications are delivered for this channel.) # Optional.

Si se cambian los contenidos, se genera una Miniatura nueva y el anzuelo le notificará la dirección y, a través de su dirección, podrá obtener nueva información.



Aquí hay otra solución. Digamos que almacenamos solo ID de GDrive de las imágenes o archivos PDF (google genera pulgares para muchos tipos de archivos).

podemos enviar una solicitud a gDrive para obtener una miniatura válida, ya que parece que los pulgares expirarán aunque no haya cambios en el archivo.

En este caso, cada miniatura dentro del componente angular. Si usa algo más, puede crear una matriz de enlaces y recorrerlos para crear enlaces apropiados.

Aquí está el código:

const thumb = () => { if (this.item.DriveId) { this.getThumb(this.item.DriveId, this.authToken) .then(response => { console.log(`response from service ${response}`); // Set thumbnail width size to 300px or any other width if needed this.item.externalThumbnailId = response.slice(0, -3) + 300; }) //here we can handle cases when API limit exceeded 10 req in a sec .catch(e => { if(e.data.error.message == ''User Rate Limit Exceeded''){ console.log(''Failed to load thumb. trying one more time''); setTimeout(thumb, 1000); } else { console.log(e); } }); } }; //call this function on component load. thumb();

Otra solución será escribir algún script backend que actualice los pulgares en los registros de DB.