如何使用python snippets.py在Google云端存储上的存储桶中上传文件?

时间:2017-11-16 15:43:59

标签: python google-cloud-platform google-cloud-storage

我正在尝试了解如何在Google云端存储上的文件夹中上传文件。 我找到了这段代码:https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/storage/cloud-client 这可以做一堆操作,比如create-bucket,delete-bucket,list,upload和download ......

但是,我无法运行代码。

我试过了:

python snippets.py [-h] scene.appspot.com list

错误:

  

错误:参数命令:无效选择:'scene -maker.appspot.com'   (从'create-bucket','delete-bucket','get-bucket-labels'中选择,   'add-bucket-label','remove-bucket-label','list','list-with-prefix',   '上传','下载','删除','元数据','make-public',   'signed-url','rename','copy')

我试过了:

python snippets.py [-h] list scene.appspot.com
python snippets.py [-h] list gs://scene.appspot.com
python snippets.py [-h] list "gs://scene.appspot.com"
python snippets.py [-h] list bucket_name

错误:

error: unrecognized arguments: scene.appspot.com
error: unrecognized arguments: gs://scene.appspot.com

我试过了:

python snippets.py list [-h] scene.appspot.com

错误:

  

错误:参数命令:无效选择:'[ - h]'(从中选择   'create-bucket','delete-bucket','get-bucket-labels',   'add-bucket-label','remove-bucket-label','list','list-with-prefix',   '上传','下载','删除','元数据','make-public',   'signed-url','rename','copy')

我试过了:

python snippets.py [-h] list

错误:

Traceback (most recent call last):
  File "snippets.py", line 322, in <module>
    list_blobs(args.bucket_name)
  File "snippets.py", line 88, in list_blobs
    bucket = storage_client.get_bucket(bucket_name)
  File "C:\Anaconda2\lib\site-packages\google\cloud\storage\client.py", line 172, in get_bucket
    bucket = Bucket(self, name=bucket_name)
  File "C:\Anaconda2\lib\site-packages\google\cloud\storage\bucket.py", line 113, in __init__
    name = _validate_name(name)
  File "C:\Anaconda2\lib\site-packages\google\cloud\storage\_helpers.py", line 39, in _validate_name
    'Bucket names must start and end with a number or letter.')
ValueError: Bucket names must start and end with a number or letter.

当我跑步时:gsutil ls 我明白了:

gs://scene.appspot.com/
gs://staging.scene.appspot.com/

如何使用python snippets.py命令? 最终,我希望用户能够通过Web浏览器将文件上传到云端存储。

1 个答案:

答案 0 :(得分:1)

您在调用正确的命令语法时遇到问题。

  

错误:参数命令:无效选择:'[ - h]'

你不应该在命令中确实有[-h]。方括号只是表示可选参数的标准符号。因此,您可以在命令中使用-h(这表示您请求命令的帮助/使用屏幕,而不是实际尝试执行命令)或完全将其保留。

从您引用的页面:

  

运行此示例:

$ python snippets.py

usage: snippets.py [-h]
                   bucket_name
                   {create-bucket,delete-bucket,get-bucket-labels,add-bucket-label,remove-bucket-label,list,list-with-prefix,upload,download,delete,metadata,make-public,signed-url,rename,copy}
                   ...

因此命令期望第一个参数(在snippets.py之后)成为存储桶名称,然后执行特定操作。根据操作,可能会有其他参数。

您使用的[-h]被解释为参数并抛出解析器:

    第一次尝试中的
  • [-h]被解释为存储桶名称, scene.appspot.com被解释为操作。但该操作不是有效的 - 因此是错误。
  • 在第二组尝试[-h]被解释为存储桶名称,'list'被解释为操作(此次是有效的),但是您有另一个参数(您尝试指定存储桶名称)这对list操作来说意外 - 因此错误。
  • 在第3次尝试中list被解释为存储桶名称而[-h]被解释为操作 - 再次是无效的 - 因此错误。
  • 在第4次尝试中[-h]被解释为存储桶名称,“list”被解释为操作(有效)。这次参数和操作的数量看起来是正确的,并且代码继续进行以验证存储桶名称,因为[-h]不是有效的,因此失败了 - 因此错误。

所以我试试(我不确定桶名称的实际预期格式):

python snippets.py scene.appspot.com list
python snippets.py gs://scene.appspot.com list

要将文件上传到存储桶(使用正确的存储桶名称格式,从以前的尝试确定,我从现在开始假设它是scene.appspot.com),它可能是从以下开始:

python snippets.py scene.appspot.com upload

要查看此操作的预期语法,请添加-h选项:

python snippets.py -h scene.appspot.com upload

注意:这整个方法都是命令驱动的,将文件从网络浏览器上传到云存储是一个完全不同的故事。我会问这个问题,有很多细节,因为可以有很多答案。