API de repos Dropbox, en fonction Metataada a un paramètre nommé "hachage" https: / /wwww.dropbox.com/developers/reeference/api#metadata p>
Puis-je calculer ce hachage localement sans appeler une fonction de repos d'API distante? p>
J'ai besoin de savoir cette valeur pour réduire la largeur de bande de téléchargement. P>
5 Réponses :
Le paramètre "hachage" sur l'appel de métadonnées n'est en réalité pas le hachage du fichier, mais un hachage des métadonnées. Son objectif est de vous faire enregistrer de devoir télécharger les métadonnées dans votre demande si elle n'a pas changé en l'approvisionnant pendant la demande de métadonnées. Il n'est pas destiné à être utilisé comme hachage de fichier. P>
Malheureusement, je ne vois aucune façon via l'API Dropbox pour obtenir un hachage du fichier lui-même. Je pense que votre meilleur choix pour réduire votre bande passante de téléchargement serait de garder une trace de la haquee de vos fichiers localement et de détecter si elles ont changé pour déterminer si vous souhaitez les télécharger. En fonction de votre système, vous souhaitez également garder une trace de la valeur "REV" (révision) renvoyée sur la demande de métadonnées afin que vous puissiez indiquer si la version sur Dropbox elle-même a changé. P>
Merci. Il craignait ce que tu m'as dit. Je vais devoir sauver URL-local_sha1-server_rev :(
Doh! Je viens de frapper ce problème moi-même. Je suis vraiment surpris que l'API Dropbox ne fournisse pas une somme SHA1 ou quelque chose pour les fichiers des métadonnées afin que vous n'ayez pas à garder une trace de cela manuellement.
Cela ne répondra pas directement à votre question, mais cela est plus important comme une solution de contournement; Le SDK Dropbox donne un exemple de courrier électronique simple.py qui utilise la taille de fichier et la durée de modification pour vérifier la devise d'un fichier.
Un exemple abrégé pris de updown.py < / a>: p>
En ce qui me concerne, non, vous ne pouvez pas. Le seul moyen consiste à utiliser API Dropbox qui est expliqué ici . P>
https://www.dropbox.com/developers/reference/content-hash explique comment Dropbox calcule leur fichier de fichiers. Une implémentation de Python de ceci est ci-dessous:
import hashlib import math import os DROPBOX_HASH_CHUNK_SIZE = 4*1024*1024 def compute_dropbox_hash(filename): file_size = os.stat(filename).st_size with open(filename, 'rb') as f: block_hashes = b'' while True: chunk = f.read(DROPBOX_HASH_CHUNK_SIZE) if not chunk: break block_hashes += hashlib.sha256(chunk).digest() return hashlib.sha256(block_hashes).hexdigest()
Semble que num_chunks code> est une variable inutilisée ici
Le programme RCLONE Go de https://rclone.org a exactement ce que vous voulez:
Il ne peut pas prendre plus d'un argument de chemin, mais je soupçonne que c'est quelque chose que vous Peut fonctionner avec ... p> RCLONE HASHSUM DropBox localfile CODE> P>
RCLONE HASHSUM DropBox localDir CODE> P>