使用Python上傳與下載檔案到阿里雲oss
阿新 • • 發佈:2018-12-16
一. 開通oss服務
- 註冊阿里雲賬號並完成實名認證
-
開通OSS服務
-
購買資源包
二. 建立儲存空間
- 登入OSS 管理控制檯。
- 單擊左側儲存空間列表中的新增按鈕+,或者單擊頁面右上方的新建 Bucket按鈕,開啟新建 Bucket對話方塊。
建立Bucket時 儲存型別 和 讀寫許可權說明
注意: 如果想直接使用連結開啟檔案,必須將許可權設定為 “公共讀”
- 新建Bucket後 點選Access Key, 建立AccessKey
二. 儲存空間設定
點選建立的Bucket可以進行相關設定:檔案管理、基礎設定、域名管理 …
注意1: 使用SDK上傳檔案時,如果在程式碼中指定了檔案上傳的目錄, 那麼Bucket中必須存在該目錄,不然會報錯
注意2:如果使用JavaScript SDK 進行檔案上傳及下載, 需要在 “基礎設定” 中進行跨域設定,具體操作如下:
三. Linux環境下Python SDK使用方法
注意: 重複上傳、重複刪除 不會報錯
1.安裝oss2:
pip install oss2
2.簡單的檔案上傳與下載 (1) 檔案上傳與下載函式封裝
import oss2
access_key_id = '你的AccessKey ID'
access_key_secret = '你的Access Key Secret'
bucket_name = '你建立的Bucket名字'
endpoint = '你所購買的oss區域'
# 上傳檔案
def upload_file_to_oss(file_name_oss, file_path_oss, file_name_server, file_path_server):
# 建立Bucket物件,所有Object相關的介面都可以通過Bucket物件來進行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# 上傳檔案
# file_name: 上傳到雲上的檔案的完整路徑
file_name = file_path_oss + file_name_oss
# file_path: 要上傳的本地檔案的完整路徑
file_path = file_path_server + file_name_server
result = bucket.put_object_from_file(file_name, file_path)
# 判斷是否上傳成功
if result.status == 200:
print("上傳成功: %s OK" % result.status)
# 組織url
url = "http://" + bucket_name + "." + endpoint + '/' + file_name
print(url)
return result.status
else:
print("上傳失敗:%s" % result.status)
print("錯誤資訊:", result)
return result.status
# 下載檔案
def get_file_from_oss(file_name_oss, file_path_oss, file_name_server, file_path_server):
# 建立Bucket物件,所有Object相關的介面都可以通過Bucket物件來進行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# file_name: 要下載的雲端完整檔案路徑
file_name = file_path_oss + file_name_oss
# file_path: 下載到本地的檔案的完整路徑
file_path = file_path_server + file_name_server
result = bucket.get_object_to_file(file_name, file_path)
# 判斷是否下載成功
if result.status == 200:
print("下載成功: %s OK" % result.status)
return result.status
else:
print("下載失敗:%s" % result.status)
print("錯誤資訊:", result)
return result.status
(2) 上傳函式呼叫
file_name_oss = "30720181011135649.pdf" # 雲上檔名
file_path_oss = "test/" # 雲上檔案路徑
file_name_server = "test.pdf" # 要上傳的檔名
file_path_server = "./" # 要上傳的檔案所在的本地資料夾
# 防止網路擁堵的情況 失敗的話再次上傳 最多上傳三次
i = 1
while i <= 3:
status = upload_file_to_oss(file_name_oss, file_path_oss, file_name_server, file_path_server)
if status != 200:
i += 1
continue
else:
break
(3) 下載函式呼叫
file_name_oss = "test.xls" # 要下載的雲上檔名
file_path_oss = "test/" # 要下載的雲上檔案路徑
file_name_server = "test.xls" # 下載到本地的檔名
file_path_server = "./ " # 下載到本地的檔案儲存的路徑
# 防止網路擁堵的情況 失敗的話再次下載 最多下載三次
i = 1
while i <= 3:
status = get_file_from_oss(file_name_oss, file_path_oss, file_name_server, file_path_server)
if status != 200:
i += 1
continue
else:
break
3.檔案刪除
import oss2
access_key_id = '你的AccessKey ID'
access_key_secret = '你的Access Key Secret'
bucket_name = '你建立的Bucket名字'
endpoint = '你所購買的oss區域'
def delete_file(file_name_oss, file_path_oss):
# 建立Bucket物件,所有Object相關的介面都可以通過Bucket物件來進行
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# file_name: 要刪除的雲端完整檔案路徑
file_name = file_path_oss + file_name_oss
# 單個物件刪除
result = bucket.delete_object(file_name)
# 批量刪除
# bucket.batch_delete_objects([file_name_1, file_name_1])
return result.status
file_name_oss = "test.png" # 雲上檔名
file_path_oss = "" # 雲上檔案路徑
i = 1
while i <= 3:
status = delete_file(file_name_oss, file_path_oss)
if status != 204:
i += 1
continue
else:
break
錯誤狀態碼說明: