Posts Tagged dropbox

使用dropbox api来备份

最近发现越来越多的app集成dropbox来读取和保存文件了。我重新考虑了一下我的备份blog数据库的策略。之前我是直接在服务器上运行一个dropbox客户端来进行备份数据库,这样其实相当的浪费服务器资源。当然直接运行一个dropbox是比较简单,只要把保存到dropbox的文件夹下面即可。

不过为了不浪费服务器资源,我看了一下dropbox的api文档,写了一个简单的脚本来上传文件到dropbox。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#author: juntao liu
import sys
import json
from dropbox import client, rest, session

#app key and secret
APP_KEY = 'your app key'
APP_SECRET = 'your app secret key'

#access type 'dropbox' or 'app_folder'
ACCESS_TYPE = 'app_folder'

#TOKEN_FILE save token for next time access
TOKEN_FILE = 'your token file path'

class DPClient:
    client = None

    def __init__(self, app_key, app_secret, access_type='app_folder'):
        self.sess = session.DropboxSession(app_key, app_secret, access_type)
        self.request_token = self.sess.obtain_request_token()

    def build_authorize_url(self):
        # Make the user log in and authorize this token
        return self.sess.build_authorize_url(self.request_token)

    def token_from_dropbox(self):
        #This will fail if the user didn't vist the authorize url and hit 'Allow'
        self.access_token = self.sess.obtain_access_token(self.request_token)

        self.key = self.access_token.key
        self.secret = self.access_token.secret

        self.client = client.DropboxClient(self.sess)

    def token_from_file(self, file_path):
        try:
            d = json.loads(file(file_path).read())
            self.sess.set_token(d['key'], d['secret'])
        except:
            return False
        self.client = client.DropboxClient(self.sess)
        return True

    def save_token(self, file_path):
        d = {'key': self.key, 'secret': self.secret}
        file(file_path, 'w+').write(json.dumps(d))

    def upload_file(self, full_path, rename='', overwrite=True):
        from os import path
        if not client:
            print 'dropbox client not exists'
            return

        if not path.exists(full_path):
            print 'file not exists'
            return

        f = open(full_path)
        if not rename:
            filename = path.basename(full_path)
        else:
            filename = rename
        self.client.put_file(filename, f, overwrite)

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "./upload_dp.py <file>"
        sys.exit(1)

    dp = DPClient(APP_KEY, APP_SECRET)
    if not dp.token_from_file(TOKEN_FILE):
        print "url:", dp.build_authorize_url()
        print "please authorize in the browser. After you're done, press enter"
        raw_input()
        dp.token_from_dropbox()
        dp.save_token(TOKEN_FILE)
    dp.upload_file(sys.argv[1])

很简单的程序,就像我说的很简单的目的只是为了上传文件。
默认DPClient上传文件会覆盖同名文件,并且使用传入的文件名作为上传的文件名。更多的功能请参考Dropbox的开发者网站:https://www.dropbox.com/developers

,

No Comments

国内在线同步服务

今天同学找我说他把某个文件夹给覆盖掉了,也就是说文件夹中的文件全部被覆盖了。问我可有办法恢复过来,我向他推荐了两款文件误删除恢复软件。就我对计算机的了解,所谓的文件覆盖是分成两步:一是删除原文件;二是重新建立一个相同文件名的文件。理论上只要没有被覆盖掉还是有可能恢复出来的。很可惜我同学没有能把文件恢复出来。我不确定是否文件误删恢复软件没有办法做这种恢复。

最近遇到很多与数据备份有关的事情:老胡把人家的硬盘分区表清除并且重装了系统;在windows上改动分区表导致linux分区丢失,这个涉及到linux、windows分区表,这数据恢复的真是让我心惊胆战,最后居然让我把数据全部恢复了也是值得记述的一件事情;linux root分区总是出问题。越来越感觉数据安全真的很重要。

每个人的计算机随时都有可能遇到数据损坏以及丢失的烦恼,我建议使用一些数据在线同步服务。对于在线同步服务如何工作以及有什么用处可以参考:关于dbank这个数据同步服务一文。

以下是几个国内的在线同步服务。
金山快盘 http://k.wps.cn/
DBank数据银行 http://www.dbank.com
酷盘 http://www.kanbox.com
盛大EverBox http://www.everbox.com

目前盛大everbox还未开放注册,需要邀请码。其他三者都可以正常使用,不过个人比较推荐金山快盘与dbank。
当然我最推荐的还是dropbox,可以看此文:关于dropbox

, ,

2 Comments

使用dropbox备份blog数据库

以前使用amazon s3 存储blog数据库的备份。这个拯救了过我的blog一次。彼时服务器突然被中断使用。那一次导致了我有段时间没有使用blog服务。

这一次在新的服务器上也写了1个月左右blog了,我又开始操心数据库的备份问题了。想到dropbox可以在linux后台运行。然后自己写了一个备份数据库的脚本,使用crontab每天定时备份一次。

,

No Comments

SetTextSize SetPageWidth