1

REST API を使用して appengine から Google ストレージにファイルを書き込んでいます。

私のコードは次のようになります。

        url = 'http://storage.googleapis.com/' + bucketName + filePath

    LOG.debug('Attempting to write file: ' + url)

    '''
    compute expiry time one year in the future
    '''
    expiresDate = datetime.utcnow() + timedelta(days=zconfig.CACHE_EXPDAY)
    formatStr = '%a, %d %b %Y %H:%M:%S GMT'

    start_cloud = time.time()

    headers = {'Content-Type' : mime,
               'Content-Length' : len(imageBytes),
               'Cache-Control' : 'Expires=' + expiresDate.strftime(formatStr),
               'x-goog-api-version' : '2',
               'x-goog-acl' : 'public-read'}

    resp, content = http.request(url, 'PUT', body=imageBytes, headers=headers)

Google ストレージ API ドキュメントに従って、REST API は、オブジェクトの ACL を変更できる「x-goog-acl」ヘッダーを取得します。

ただし、このオブジェクトが作成された後でも、ACL は public-read に設定されていません。gsutil と GS ブラウザの両方から確認できます。

誰かが私が間違っていることを教えてもらえますか?

編集: jterrace は、ヘッダーをリクエストに渡していないことを指摘しました。私はそれを修正しました。ただし、オブジェクトに public-read ACL はまだ設定されていません。

4

2 に答える 2

1

実際にはヘッダー辞書をリクエスト関数に渡していないようです:

resp, content = http.request(url, 'PUT', body=imageBytes)

次のようにする必要があります。

resp, content = http.request(url, 'PUT', body=imageBytes, headers=headers)
于 2013-05-20T20:39:30.063 に答える
0

正確な理由/方法はわかりませんが、古いコンソールと新しいコンソールにアクセスしたときに、プロジェクト オーナーとしてログインしていないと思います。オブジェクト ACL を取得/設定する権限がない場合、古いコンソールは「公開して共有」オプションを表示しません (また、それを切り替えることもできません)。新しいコンソールは、実際にそれを教えてくれるという意味で優れています.

ログインしたユーザーがプロジェクトの所有者であることを再確認できますか?

于 2013-05-23T05:23:02.313 に答える