web-dev-qa-db-ja.com

ファイルのパブリックURLを取得-Google Cloud Storage-App Engine(Python)

python getPublicUrlと同等 PHPメソッド はありますか?

$public_url = CloudStorageTools::getPublicUrl("gs://my_bucket/some_file.txt", true);

Python用Google Cloudクライアントライブラリを使用していくつかのファイルを保存しています。保存しているファイルのパブリックURLをプログラムで取得する方法を見つけようとしています。

13
orcaman

ダニエル、アイザック-両方ありがとう。

Googleは意図的にGCSから直接配信しないことを意図しているようです(帯域幅の理由?知らない)。したがって、ドキュメントによる2つの選択肢は、Blobstoreまたは Image Services (画像の場合)を使用しています。

私がやったことは、GCSで blobstore を使用してファイルを提供することです。

GCSパスからブロブストアキーを取得するために、私は次を使用しました:

blobKey = blobstore.create_gs_key('/gs' + gcs_filename)

次に、サーバーでこのURLを公開しました-Main.py:

app = webapp2.WSGIApplication([
...
    ('/blobstore/serve', scripts.FileServer.GCSServingHandler),
...

FileServer.py:

class GCSServingHandler(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self):
        blob_key = self.request.get('id')
        if (len(blob_key) > 0):
            self.send_blob(blob_key)
        else: 
            self.response.write('no id given')
3
orcaman

URLの作成方法については https://cloud.google.com/storage/docs/reference-uris を参照してください。

パブリックURLには、2つの形式があります。

http(s)://storage.googleapis.com/[bucket]/[object]

または

http(s)://[bucket].storage.googleapis.com/[object]

例:

bucket = 'my_bucket'
file = 'some_file.txt'
gcs_url = 'https://%(bucket)s.storage.googleapis.com/%(file)s' % {'bucket':bucket, 'file':file}
print gcs_url

これを出力します:

https://my_bucket.storage.googleapis.com/some_file.txt

40
Danny Hong

画像APIの _get_serving_url_ を使用する必要があります。そのページで説明しているように、まずcreate_gs_key()を呼び出して、Images APIに渡すキーを取得する必要があります。

5
Daniel Roseman

利用できませんが、 バグ を提出しました。その間、これを試してください:

import urlparse

def GetGsPublicUrl(gsUrl, secure=True):
  u = urlparse.urlsplit(gsUrl)
  if u.scheme == 'gs':
    return urlparse.urlunsplit((
        'https' if secure else 'http',
        '%s.storage.googleapis.com' % u.netloc,
        u.path, '', ''))

例えば:

>>> GetGsPublicUrl('gs://foo/bar.tgz')
'https://foo.storage.googleapis.com/bar.tgz'
2
Isaac