s3的介紹不贅述了。
對於python,s3提供了乙個sdk,可以直接在terminal中安裝:
pip install boto3
s3 =boto3.resource('s3',
aws_access_key_id='',
aws_secret_access_key='',
region_name='')
這裡有個還沒弄清楚的問題,使用公司aws的key,我可以在console裡面操作bucket傳檔案,但是不能新建bucket。理論上新建bucket是不收費的~~,暫時沒時間研究,留著待解決,好在我的任務是把某資料夾裡面的*.js檔案上傳到s3上面的某個資料夾。那就快刀斬亂麻,切入主題。
拿到檔案的絕對路徑:
path = os.getcwd()+ relative_path
# 讀取檔案
files = glob.glob(path)
for f in
files:
tail = f.path.split(f)[0] # 拿到檔名
data = open(f, 'rb')
s3.bucket('ur_bucket_name').put_object(key='dir/%s'%tail, body=data) #這個key是bucket中資料夾和你上傳檔案的名稱,不是秘鑰什麼鬼的。
前輩給了很多建議,確實自己寫的太low了,不是完全能吃透大神的逼格,只能部分進行refactor。
關於路徑,之前是一盤漿糊,稍微借助這個指令碼的使用有了點點清晰的概念。之前沒有提到放在**應用,是作為django的乙個指令碼來上傳檔案。嘗試了點新的方法,就是把指令碼放在django command中,在terminal裡就是這個效果:
python manage.py upload_js -d 'abs_route'
import os
os.path
.split()
orurl.split('/')[0]
都可以得到想要的部分。
最後還學了點aws cli的操作,比如:
顯示內容 aws s3 ls s3://'some url'
刪除某prefix下的全部檔案 aws s3 rm --recursive s3://'some url'
組長提出cross platform的問題,windows下問價的目錄是backslash。於是就得放棄那種path + 『/*』 的拼接方法。查詢下,python提供了這種,簡單的os.path.join(path, '*')
,搞定之…… 向AWS S3 上傳檔案
目的是為了要上傳大一些的檔案,如果中間網路出現問題,後面可以有斷點續傳類似的功能。控制台 aws s3api list multipart uploads bucket bucket name aws s3api abort multipart upload bucket bucket name k...
django 檔案上傳
檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...
django 檔案上傳
檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...