Django上傳檔案到AWS S3

2021-07-16 08:48:08 字數 1356 閱讀 3369

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...