amazon s3 全稱為 亞馬遜簡易存儲服務(Amazon Simple Storage Service) 簡單的說就是個網上存文件的服務器,可以把自己文件放上去,然后通過它開放的api來進行管理。官方網站是http://aws.amazon.com/cn/s3/
在s3上面有一個bucket,我的理解就是模塊化,因為那個東西很大,如果我要存在音樂文件和安裝包,和在一起放的話會很亂,就用bucket來分一下模塊。這樣后台也可以更好的管理。對於開發者也可以只開放對於的模塊,安全性也得到提高。還有一點就是s3上每個文件都有一個key,這個key如果從后台來看的話就是文件的文件名。如果設置了對外開放的話,全球用戶都可以根據這個key去訪問這個文件
最近學習的就是用python寫一個上傳文件到s3的功能
上傳的話主要包括 (1)檢測文件是否存在;(2)上傳文件
判斷key是否存在的代碼 其中BUCKET_NAME 就是上面提到的 bucket的名字。然后還有兩個東西是 AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY 這兩個東西是s3的唯一認證,在注冊好之后會得到這兩個東西,python中直接寫到java里面就可以。如果是在java中的話會是一個文件credentials,把這兩個東西寫進去,然后把這個文件放到windows用戶目錄下的.aws文件夾下才可以用。我們覺得不方便所以就沒有用java來寫。
def is_s3_file_exist(key): ''' weather s3 exists this key return True exist ''' bucket_name = BUCKET_NAME # connect to the bucket conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) bucket = conn.get_bucket(bucket_name) # create a key to keep track of our file in the storage k = Key(bucket) k.key = key if k.exists(None): logging.info("s3 exists this file") return True else: return False
上傳部分的代碼,前面和上一個函數都差不多,上傳也就只有一行 k.set_contents_from_filename(filepath),然后有一個k.make_public()這個的話就是前面所說的讓所有人都可以訪問這個文件,但是后台得配置一下權限。
def upload_apk_to_s3(key,filepath): ''' upload apk to s3 ''' try: bucket_name = BUCKET_NAME # connect to the bucket conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) bucket = conn.get_bucket(bucket_name) # create a key to keep track of our file in the storage k = Key(bucket) k.key = key k.set_contents_from_filename(filepath) # we need to make it public so it can be accessed publicly # using a URL like http://s3.amazonaws.com/bucket_name/key k.make_public() logging.info("upload file to s3 success") return True except Exception,e: logging.info("upload_apk_to_s3 error") logging.info(e) return False
在代碼中有一個logging.info(""),這個是linux常用的打印日志的方法,因為在linux中這些代碼都是后台運行的。如果靠print來輸出日志的話,我們是看不到的,這個東西非常好用一次配置之后整個工程都可以用
import logging logging.basicConfig(filename='/var/log/xx/xx.log', filemode='a', format='%(asctime)s %(name)s %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG)
以后只需要調用logging.info("")就可以了,然后利用命令
tail -f /var/log/xx/xx.log
就可以查看最新的log文件了,還有一點值得注意的是,這些目錄得先創建好,日志文件它會自己創建,但是目錄不會。