🐿 Dropbox API でアップロード時にファイルのタイムスタンプを保持する
作成日: 2021/11/22
0

Dropbox API でファイルをアップロードするコードを、ネット上で探したところ、大抵は次のようなものでした。

import dropbox

dbx = dropbox.Dropbox(dropbox_access_token)
with open(myfile_path, 'rb') as f:
    try:
        dbx.files_upload(f.read(), dropbox_path)
    except:
        print('--- API error ---')

これで一応 Dropbox へファイルをアップロードできるのですが、アップロードされたファイルのタイムスタンプはアップロードがおこなわれた日時になります。
タイムスタンプが気にならなければこれでいいのですが、ログファイルなど場合、元のファイルと違っているとちょっと気になります。
そこで、こちらのサンプルコードを参考にして、ファイルの更新日時を保持しながらアップロードするコードを書いてみました。

import dropbox
import os
import time
import datetime

mtime = os.path.getmtime(myfile_path)
dbx = dropbox.Dropbox(dropbox_access_token)
with open(myfile_path, 'rb') as f:
    try:
        dbx.files_upload(
            f.read(),
            dropbox_path,
            mode=dropbox.files.WriteMode.overwrite,
            client_modified=datetime.datetime(*time.gmtime(mtime)[:6]),
            mute=True)
    except:
        print('--- API error ---')

これで Dropbox へのアップロード時に元のファイルの更新日時が保持されます。ただし、ファイルの作成日時は保持することができず、Dropbox 上のファイルの作成日時はアップロードされた日時になります。これは仕様上やむを得ないことかもしれません。


pythonで自然言語処理プログラムが書けるようになりたいと思っています。Ticketnoteで自分の到達度を確認できれば嬉しいです。