Tải tệp lên Dropbox sử dụng CURL và Dropbox API Version 2

Mình sử dụng cách này để tải tệp cần backup hàng ngày lên Dropbox kết hợp từ Crontab, CURL và Dropbox API v2, các bạn có thể đọc tiếp để tham khảo và áp dụng nếu cần.

Chúng ta cần tạo tài khoản Dropbox, có thể đăng nhập qua Google:

  1. Truy cập: https://www.dropbox.com/developers/apps/create tạo tài khoản nếu chưa có hoặc đăng nhập nếu đã có rồi.
  2. Tiếp theo sẽ có 3 bước chúng ta cần hoàn thành để tạo 1 app:
    – Chọn 1 API (thông thường chỉ có 1 – chỉ việc tick chọn là xong)
    – Chọn quyền truy cập cho API
    – Nhập tên app vào tạo app
  3. Sau khi tạo xong thì cần sang tab Permissions để cung cấp quyền upload và download (nếu cần). Trong phần Files and folders tick chọn files.content.write để có quyền upload, tick chọn files.content.read nếu bạn muốn download file qua API nhé. Rồi bấm nút “Submit” để lưu lại (còn các quyền khác các bạn tự tìm hiểu nhé, mình chỉ cần tải tệp lên thì chỉ cần nhiêu đó thôi).
  4. Quay trở lại tab Settings và kéo xuống phần OAuth 2 và để ý phần Access token expiration sẽ có 2 tùy chọn là Short-lived và No expiration. Đối với Short-lived thì access token sẽ chỉ tồn tại ở một khoảng thời gian ngắn, khi hết hạn thì bạn sẽ không thể dùng access token để upload được nữa mà phải generate lại token mới để sử dụng. Đối với No expiration thì ngược lại, nó sẽ không bao giờ hết hạn và mình chọn cái này để đỡ phải generate lại access token.
  5. Bấm Generated access token để tạo access token mới, các bạn lưu lại token này để sử dụng nhé, vì khi refresh lại trang thì nó sẽ biến mất. Trường hợp quên hoặc thất lạc token thì cứ vào gen lại cái mới rồi sử dụng bình thường.
  6. Các thông số khác thì các bạn tự đọc nhé vì mình làm vài bước trên là đã có thể upload được rồi nên mình bỏ qua các phần còn lại.

Sau khi có access token của Dropbox API thì giờ có thể tải file lên bằng URL:

Tải lên:

curl -X POST https://content.dropboxapi.com/2/files/upload \
     --header "Authorization: Bearer DROPBOX_ACCESS_TOKEN" \
     --header "Dropbox-API-Arg: {\"path\": \"DROPBOX_STORE_PATH\", \"mode\": \"overwrite\"}" \
     --header "Content-Type: application/octet-stream" \
     --data-binary "@/path/to/file"

Giải thích: DROPBOX_ACCESS_TOKEN là access token chúng ta lấy từ các bước trên, DROPBOX_STORE_PATH là đường dẫn lưu trữ trên Dropbox (ví dụ /home/upload/test.txt thì các bạn có thể check trên thư mục dropbox home -> upload -> test.txt), “/path/to/file” là đường dẫn file cần tải lên (ví dụ: /home/pi/test.txt). Mình để modeoverwrite => nó sẽ thay thế (ghi đè file) nếu đã tồn tại đường dẫn DROPBOX_STORE_PATH trên Dropbox của bạn.

Ví dụ tải lên:

curl -X POST https://content.dropboxapi.com/2/files/upload \
     --header "Authorization: Bearer o_dresR9ZLsAAAAAAAAAASrU2e8NUcohmbX2cRw7StrYsng_8-beW2qOQXWyWiJK" \
     --header "Dropbox-API-Arg: {\"path\": \"/home/myapp/backup.zip\", \"mode\": \"overwrite\"}" \
     --header "Content-Type: application/octet-stream" \
     --data-binary "@/home/pi/backup.zip"

Tải xuống:

curl -X POST https://content.dropboxapi.com/2/files/download \
     --header "Authorization: Bearer DROPBOX_ACCESS_TOKEN" \
     --header "Dropbox-API-Arg: {\"path\": \"DROPBOX_STORE_PATH\"}" \
     -o "/path/to/save"

Giải thích: “/path/to/save” là đường dẫn sẽ lưu file tải về ở máy của bạn.

Ví dụ tải xuống:

curl -X POST https://content.dropboxapi.com/2/files/download \
     --header "Authorization: Bearer o_dresR9ZLsAAAAAAAAAASrU2e8NUcohmbX2cRw7StrYsng_8-beW2qOQXWyWiJK" \
     --header "Dropbox-API-Arg: {\"path\": \"/home/myapp/backup.zip\"}" \
     -o "/home/pi/backup_downloaded.zip"

Chúng ta có thể thêm lệnh upload hoặc download vào 1 file .sh rồi thêm vào crontab để thực hiện việc upload hoặc download một cách tự động.

Leave a Reply

Your email address will not be published. Required fields are marked *