本地计算文件的Dropbox哈希值

Vic*_*hez 6 dropbox dropbox-api

Dropbox rest api,在函数metatada中有一个名为"hash"的参数https://www.dropbox.com/developers/reference/api#metadata

我可以在不调用任何远程api休息函数的情况下在本地计算此哈希吗

我需要知道这个值来减少上传带宽.

Ben*_*lau 5

元数据调用上的"哈希"参数实际上不是文件的哈希值,而是元数据的哈希值.它的目的是通过在元数据请求期间提供元数据而不必更改请求中的元数据,从而节省您的时间.它不打算用作文件哈希.

不幸的是,我没有看到任何通过Dropbox API来获取文件本身的哈希值.我认为减少上传带宽的最佳选择是在本地跟踪文件的哈希值,并在确定是否上传文件时检测它们是否已更改.根据您的系统,您还可能希望跟踪元数据请求中返回的"rev"(修订版)值,以便判断Dropbox上的版本是否已更改.


SMX*_*SMX 5

https://www.dropbox.com/developers/reference/content-hash解释了 Dropbox 如何计算他们的文件哈希。下面是一个 Python 实现:

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()
Run Code Online (Sandbox Code Playgroud)