関数 metatada の Dropbox rest api には、「hash」という名前のパラメーターがありますhttps://www.dropbox.com/developers/reference/api#metadata
リモート API レスト関数を呼び出さずに、このハッシュをローカルで計算できますか?
アップロード帯域幅を減らすには、この値を知る必要があります。
関数 metatada の Dropbox rest api には、「hash」という名前のパラメーターがありますhttps://www.dropbox.com/developers/reference/api#metadata
リモート API レスト関数を呼び出さずに、このハッシュをローカルで計算できますか?
アップロード帯域幅を減らすには、この値を知る必要があります。
メタデータ呼び出しの「ハッシュ」パラメーターは、実際にはファイルのハッシュではなく、メタデータのハッシュです。その目的は、メタデータ リクエスト中にメタデータを提供することで、メタデータが変更されていない場合に、リクエストでメタデータを再ダウンロードする必要をなくすことです。ファイル ハッシュとして使用するためのものではありません。
残念ながら、Dropbox API を介してファイル自体のハッシュを取得する方法がわかりません。アップロード帯域幅を減らすための最善の策は、ファイルのハッシュをローカルで追跡し、アップロードするかどうかを決定するときにそれらが変更されたかどうかを検出することだと思います. システムによっては、Dropbox 自体のバージョンが変更されたかどうかを確認できるように、メタデータ リクエストで返される "rev" (リビジョン) 値を追跡することもできます。
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()