2017-08-08 81 views
0

試圖從谷歌應用程序引擎標準運行瓶使用client library for Python訪問谷歌雲存儲桶。谷歌雲存儲權限在谷歌應用程序引擎標準中被拒絕

編輯)沒有正式支持。請參閱解決方法的答案。

代碼看起來是這樣的..

from flask import Flask 
from google.cloud import storage 

# UNCOMMENT THIS FOR SOLUTION 
#import requests_toolbelt.adapters.appengine 
#requests_toolbelt.adapters.appengine.monkeypatch() 

app = Flask(__name__) 
@app.route('/endpoint', methods=['POST', 'PUT']) 
def upload_to_storage(): 
    try: 

     # file info 
     filename = secure_filename(file.filename) 
     mimetype = file.content_type 

     # connect to bucket 
     client = storage.Client(project='projectName') 
     bucket = client.get_bucket('bucketName') 

     # upload file to bucket 
     blob = storage.Blob(filename, bucket) 
     blob.upload_from_file(file, content_type=mimetype, num_retries=10) 

     return jsonify({'status':200}) 

    except: 

     return jsonify({'status':500}) 

錯誤消息:

( '連接中斷。',錯誤(13 '權限被拒絕'))

+0

應用程序引擎應用程序作爲特定服務帳戶運行。您的應用引擎應用的服務帳號是否有權使用「my-bucket」存儲區執行相關操作? –

+0

是的,服務帳戶有權限。我認爲發生了什麼是我需要確保請求使用URLFetch https://cloud.google.com/appengine/docs/standard/python/issue-requests –

回答

0

回答

(編輯)google.cloud.storage在GAE標準中沒有正式支持,爲了使驗證正常工作(google-auth)需要做一些額外的步驟:

更新requirements.txt

請求,工具區

假設你使用一個名爲「lib」目錄下的第三方供應商來庫

$ pip install -r requirements.txt -t lib

更新appengine_config.py from google.appengine.ext import vendor vendor.add('lib')

更新main.py(或等同物) import requests_toolbelt.adapters.appengine requests_toolbelt.adapters.appengine.monkeypatch()

更新的app.yaml libraries: - name: ssl version: latest

+0

它不是問題信息,它是答案 –

+0

(編輯答案,以清楚說明我不只是增加額外的問題信息) –

0

代替使用google.cloud.storage模塊,請使用專爲GAE標準操作而設計的GCS客戶端: https://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/setting-up-cloud-storage#downloading_the_client_library。 此客戶端將隱式執行認證,避免出現「Permission denied」錯誤。

以下頁面演示如何使用客戶端編寫:h ttps://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/read-write-to-cloud-storage#writing_to_cloud_storage。唯一缺少的信息是示例中的「文件名」格式爲「//」。寫操作負責定位和寫入正確的存儲區(您不需要事先檢索存儲區)。

+0

謝謝Sarit!.. –

相關問題