我正在制作一個網路應用程式,您可以在其中上傳和下載檔案,但我將它托管在 Heroku 上,因此我無法將檔案存盤在我的計算機上。我決定使用一種叫做 Flask-GoogleStorage 的東西,但它需要一個“谷歌云存盤客戶端”。我去了云控制臺并創建了一個服務帳戶并將私鑰放入我的代碼中,但我不斷收到此錯誤:
[2022-01-03 19:54:20,784] WARNING in google_storage: Could not authenticate the Google Cloud Storage client
這是我用來設定存盤的代碼:
app.config['GOOGLE_APPLICATION_CREDENTIALS'] = PRIVATE_SERVICE_KEY
app.config['GOOGLE_STORAGE_LOCAL_DEST'] = UPLOAD_FOLDER
app.config['SERVER_NAME'] = SERVER_NAME
#Google cloud storage
with app.app_context():
files = Bucket("files")
storage = GoogleStorage(files)
app.config.update(
GOOGLE_STORAGE_LOCAL_DEST = app.instance_path,
GOOGLE_STORAGE_SIGNATURE = {"expiration": timedelta(minutes=5)},
GOOGLE_STORAGE_FILES_BUCKET = "files-bucket-id"
)
storage.init_app(app)
任何建議都會非常有幫助,因為我以前沒有使用過這個谷歌平臺,而且我很迷茫。
如果有任何更簡單的在線存盤檔案的方法,我也將不勝感激。
先感謝您!
uj5u.com熱心網友回復:
好的,我想我明白你需要做什么了。
您需要安裝Cloud SDK ( gcloud)才能按照這些說明進行操作,但您也可以使用 Google 的Cloud Console執行所有操作:
BILLING=[[YOUR-BILLING-ACCOUNT]]
PROJECT=[[YOUR-PROJECT]]
BUCKET=[[YOUR-BUCKET]]
ACCOUNT=[[YOUR-SERVICE-ACCOUNT]]
# Create Project
gcloud projects create ${PROJECT}
# Associate Billing required for Cloud Storage
gcloud beta billing projects link ${PROJECT} \
--billing-account=${BILLING}
# Create Bucket
gsutil mb -p ${PROJECT} gs://${BUCKET}
# Create Service Account
gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}
EMAIL=${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com
# Grant Service Account permission to Cloud Storage
gcloud projects add-iam-policy-binding ${PROJECT} \
--role=roles/storage.admin \
--member=serviceAccount:${EMAIL}
# Create Service Account Key
gcloud iam service-accounts keys create ${PWD}/${ACCOUNT}.json \
--iam-account=${EMAIL} \
--project=${PROJECT}
# Export
export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${ACCOUNT}.json
flask run
和(替換[[VARIABLES]]為值):
from flask_googlestorage import GoogleStorage, Bucket
files = Bucket("files")
storage = GoogleStorage(files)
app = Flask(__name__)
app.config.update(
GOOGLE_STORAGE_LOCAL_DEST = app.instance_path,
GOOGLE_STORAGE_SIGNATURE = {"expiration": timedelta(minutes=5)},
GOOGLE_STORAGE_FILES_BUCKET = "[[BUCKET]]"
)
storage.init_app(app)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403764.html
標籤:
