python getPublicUrlと同等 PHPメソッド はありますか?
$public_url = CloudStorageTools::getPublicUrl("gs://my_bucket/some_file.txt", true);
Python用Google Cloudクライアントライブラリを使用していくつかのファイルを保存しています。保存しているファイルのパブリックURLをプログラムで取得する方法を見つけようとしています。
ダニエル、アイザック-両方ありがとう。
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')
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
これを出力します:
画像APIの _get_serving_url
_ を使用する必要があります。そのページで説明しているように、まずcreate_gs_key()
を呼び出して、Images APIに渡すキーを取得する必要があります。
利用できませんが、 バグ を提出しました。その間、これを試してください:
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'