Dropboxの残りのAPIのDropboxのハッシュを計算する関数metatadaに「ハッシュ」https://www.dropbox.com/developers/reference/api#metadataはローカルで、ファイル
という名前のパラメータを持っている私はコールせずにローカルで任意のリモートAPIの残りの機能をこのハッシュを計算することはできますか?
アップロード帯域幅を減らすには、この値を知っておく必要があります。
Dropboxの残りのAPIのDropboxのハッシュを計算する関数metatadaに「ハッシュ」https://www.dropbox.com/developers/reference/api#metadataはローカルで、ファイル
という名前のパラメータを持っている私はコールせずにローカルで任意のリモートAPIの残りの機能をこのハッシュを計算することはできますか?
アップロード帯域幅を減らすには、この値を知っておく必要があります。
メタデータ呼び出しの「hash」パラメータは、実際にはファイルのハッシュではなく、メタデータのハッシュです。メタデータの要求中にメタデータを指定して変更していない場合、メタデータをリクエスト内で再ダウンロードする必要がありません。ファイルハッシュとして使用するためのものではありません。
残念ながら、Dropbox APIを使用してファイル自体のハッシュを取得する方法はありません。あなたのアップロード帯域幅を減らすための最善の策は、あなたのファイルのハッシュをローカルで追跡し、それらをアップロードするかどうかを決定するときに変更されているかどうかを検出することです。システムによっては、メタデータリクエストに返される "rev"(リビジョン)値を追跡して、Dropbox自体のバージョンが変更されたかどうかを知ることもできます。
これはあなたの質問に直接答えるものではありませんが、回避策としてはさらに意味があります。 dropbox sdkはファイルのサイズと変更時間を使ってファイルの通貨をチェックする簡単なupdown.pyの例を提供します。
updown.pyから取ら略し例:私の知る限りは心配として
dbx = dropbox.Dropbox(api_token)
...
# returns a dictionary of name: FileMetaData
listing = list_folder(dbx, folder, subfolder)
# name is the name of the file
md = listing[name]
# fullname is the path of the local file
mtime = os.path.getmtime(fullname)
mtime_dt = datetime.datetime(*time.gmtime(mtime)[:6])
size = os.path.getsize(fullname)
if (isinstance(md, dropbox.files.FileMetadata) and mtime_dt == md.client_modified and size == md.size):
print(name, 'is already synced [stats match]')
、ありませんあなたがすることはできません。 唯一の方法は、hereと説明されているDropbox APIを使用することです。
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
num_chunks = int(math.ceil(file_size/DROPBOX_HASH_CHUNK_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()
ありがとう。彼はあなたが私に言ったことを恐れた。私はurl-local_sha1-server_revを保存する必要があります:( –
Doh!私はちょうどこの問題を打ちました。Dropbox APIはSHA1サムまたはメタデータ内のファイルの何かを提供していないことに本当に驚いています。これを手動で追跡する必要があります。 –