上传 Google 云端硬盘
Google 云端硬盘 ( Google Drive ) 是目前最多人使用的云端储存空间,这篇教学会介绍申请 Google Cloud 服务的金钥,接着串接 Google 的云端硬盘 API,实现透过 Python 上传文件到 Google 云端硬盘的功能。
快速导览:
本篇使用的 Python 版本为 3.9.6,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
启用 Google Drive API
使用 Google 账号登录后,打开 Google Cloud 云端运算服务页面,点击右上角“控制台”。
Google Cloud 云端运算服务:https://cloud.google.com/?hl=zh-TW
点击后会进入“My First Project”专案,这是每个账号默认使用的第一个专案,点击左上角按钮打开选单,选择“API 和服务 > 已启用的 API 和服务”。
点击上方“启用 API 和服务”,准备启用默认关闭的 Google Drive API。
在 API 搜索字段搜索“google drive api”。
找到 Google Drive API 后,点击“启用”将其启用。
启用后,点击左侧“凭证”打开凭证管理页面,点击上方“建立凭证”按钮,选择“服务账户”,表示要透过外部服务器进行控制。
设定新凭证的服务账户名称和 ID,新凭证的服务账户就会建立完成。
产生金钥 JSON
服务账户建立完成后,点击“管理金钥”,可从后方“...”打开选单,或进入服务账户后点击“金钥”页签。
点击“新增金钥 > 建立新的金钥”。
选择 JSON 后,点击“建立”。
就会下载一份金钥的 JSON 文件到电脑中。
打开 Google Drive 文件夹共用权限
另开一个浏览器的视窗或分页,登录 Google 账号后前往自己的 Google 云端硬盘,新增一个文件夹,并设定文件夹的共用权限为“编辑者”。
进入文件夹后,观察文件夹的网址,记住 folders 后方的代码,这串代码是文件夹的 ID。
编辑程序,上传文件
一开始先使用命令安装 google 与 googleapiclient 软件包 ( Colab 或 Anaconda 使用 !pip )。
pip install google google-api-python-client
如果使用 Google Colab,需要先挂接自己的云端硬盘 ( 才能选择文件上传 )。
将刚刚下载的金钥 JSON 文件,放到和要执行的 python 文件同样的文件夹里,使用 Google 官方提供的范例程序码,修改文件夹 ID、金钥 JSON 名称以及要上传的文件名称,执行后就能将文件上传到 Google 云端硬盘里。
参考:上传文件数据
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # 使用 Colab 要換路徑使用,本機環境不需要
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
UPLOAD_FOLDER = '你的 Google 雲端資料夾 ID'
SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = '你的金鑰檔案路徑與名稱' # 金鑰檔案
# 建立憑證
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
# 串連服務
service = build('drive', 'v3', credentials=creds)
filename = "mona-s.jpg" # 要上傳檔案的路徑與名稱
media = MediaFileUpload(filename) # 建立檔案物件
file = {'name': filename, 'parents': [UPLOAD_FOLDER]}
print("開始上傳檔案...")
file_id = service.files().create(body=file, media_body=media).execute()
print(file_id) # 印出上傳檔案後的結果
如果是二进制的图片文件 ( 用户上传、OpenCV 拍照...等 ),则参考下方程序码,使用 MediaIoBaseUpload 的方法,搭配 cv2.imencode 或 io.BytesIO 转换后就能上传。
jpg = cv2.imencode('.jpg', image)[1] # 將 OpenCV 的圖片 numpy 陣列轉換成 jpg
imageBytes = io.BytesIO(jpg) # 將 jpg 轉換成二進位
media = MediaIoBaseUpload(imageBytes, mimetype='image/jpg', resumable=True)
file = {'name': filename, 'parents': [UPLOAD_FOLDER]}
print("正在上傳檔案...")
file_id = service.files().create(body=file, media_body=media).execute()
print('雲端檔案ID:' + str(file_id['id']))
前往 Google 云端硬盘分享的文件夹里,就会看见出现了上传的文件,拥有者则是 Google Cloud 服务账户名称。
更多应用
如果可以将文件上传到 Google 云端硬盘,不论是摄影机画面或爬虫数据,都能运用 Google 云端硬盘进行备份的动作,是相当方便实用的功能!下方列出一些连动 Google 云端硬盘的范例:
参考
- https://github.com/googleapis/google-api-python-client
- https://developers.google.com/drive/api/guides/manage-uploads
微信扫码关注
抖音扫码关注