1. 程式人生 > >使用Python上傳與下載檔案到阿里雲oss

使用Python上傳與下載檔案到阿里雲oss

一. 開通oss服務

  1. 註冊阿里雲賬號並完成實名認證 Snipaste_2018-10-17_16-04-07.jpg-74.8kB
  1. 開通OSS服務 1.png-92.6kB

  2. 購買資源包 Snipaste_2018-10-17_16-07-21.jpg-182.1kB

二. 建立儲存空間

  1. 登入OSS 管理控制檯。
  2. 單擊左側儲存空間列表中的新增按鈕+,或者單擊頁面右上方的新建 Bucket按鈕,開啟新建 Bucket對話方塊。 image_1cq0hj0n118gnqm817m10ok4j333.png-167.5kB

建立Bucket時 儲存型別 和 讀寫許可權說明

注意: 如果想直接使用連結開啟檔案,必須將許可權設定為 “公共讀”

933_zh-CN (1).png-26.7kB

  1. 新建Bucket後 點選Access Key, image_1cq0hrcd21mq8rvi10ig1v9b1t603g.png-24.6kB 建立AccessKey 在這裡插入圖片描述

二. 儲存空間設定

點選建立的Bucket可以進行相關設定:檔案管理、基礎設定、域名管理 …

注意1: 使用SDK上傳檔案時,如果在程式碼中指定了檔案上傳的目錄, 那麼Bucket中必須存在該目錄,不然會報錯

image_1cq0inrpr10s01a42njnjru1dh06a.png-133.2kB

注意2:如果使用JavaScript SDK 進行檔案上傳及下載, 需要在 “基礎設定” 中進行跨域設定,具體操作如下:

Snipaste_2018-10-17_17-29-01.jpg-126.7kB

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

錯誤狀態碼說明: