7
votes

Calculer localement le hachage de fichiers Dropbox

API de repos Dropbox, en fonction Metataada a un paramètre nommé "hachage" https: / /wwww.dropbox.com/developers/reeference/api#metadata

Puis-je calculer ce hachage localement sans appeler une fonction de repos d'API distante?

J'ai besoin de savoir cette valeur pour réduire la largeur de bande de téléchargement.


0 commentaires

5 Réponses :


5
votes

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.

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é.


2 commentaires

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.



1
votes

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>: xxx


0 commentaires


5
votes

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()


1 commentaires

Semble que num_chunks est une variable inutilisée ici



0
votes

Le programme RCLONE Go de https://rclone.org a exactement ce que vous voulez:

RCLONE HASHSUM DropBox localfile

RCLONE HASHSUM DropBox localDir

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 ... xxx


0 commentaires