import requests
import json
class DropboxUtil:
_token = None
_logger = None
UPLOAD_SIZE = 149 * 1024 * 1024
def __init__(self, token):
DropboxUtil._token = "Bearer " + token
def upload(self, data = None):
"""
Start a new upload session and upload the requested content to desired directory on Dropbox.
"""
try:
upload_url = "https://content.dropboxapi.com/2/files/upload_session/start"
api_arguments = {
"close" : False
}
upload_response = requests.post(upload_url, headers = {
"Authorization" : self._token,
"Dropbox-API-Arg" : json.dumps(api_arguments),
"Content-Type" : "application/octet-stream"
})
if "session_id" in upload_response.json():
return upload_response.json()['session_id']
else:
raise Exception("Unable to upload file to Dropbox")
except Exception as e:
raise e
def _append_to_upload(self, session_id, offset, data):
try:
append_uri = "https://content.dropboxapi.com/2/files/upload_session/append_v2"
api_arguments = {
"cursor": {
"session_id": session_id,
"offset": offset
},
"close": False
}
requests.post(append_uri, data, headers={
"Authorization" : self._token,
"Content-Type" : "application/octet-stream",
"Dropbox-API-Arg" : json.dumps(api_arguments)
})
except Exception as e:
raise e
def _finish_upload(self, filepath, offset, session_id):
"""
Ends current upload session and creates the file with given filename. Offset is the total size if file in bytes.
"""
try:
finish_upload_url = "https://content.dropboxapi.com/2/files/upload_session/finish"
api_arguments = {
"cursor": {
"session_id": session_id,
"offset": offset
},
"commit": {
"path": filepath,
"mode": "add",
"autorename": True,
"mute": False,
"strict_conflict": False
}
}
finish_response = requests.post(finish_upload_url, headers = {
"Authorization" : self._token,
"Content-Type" : "application/octet-stream",
"Dropbox-API-Arg" : json.dumps(api_arguments)
})
print(finish_response.content)
except Exception as e:
raise e
if __name__ == '__main__':
db = DropboxUtil('<token>')
session_id = db.upload()
data = b'test_data'
db._append_to_upload(session_id, len(data), data)
db._finish_upload('/test11.txt', 0, session_id)
Why does test11.txt is always created with no content ?