谷歌云平台blob.download_to_file下载文件的位置

时间:2018-09-25 22:07:04

标签: google-cloud-platform blob google-cloud-storage google-cloud-functions

gcloud beta functions deploy gcp-data-transfer --project probable-scout-216702 --runtime python37 --trigger-bucket connector-test-data-securonix --entry-point detect_file

以上是我正在使用的Google云功能。这是我的Google云存储桶上的触发器。我的gcloud函数正在运行,但是我不知道应该在哪里下载文件。我能够将其存储在/tmp/目录中,但是它仍然不在我自己的系统上,我也不知道哪个{{ 1}}正在下载。我正在使用以下代码:

/tmp

我遇到错误:

def detect_file(file, context):
    destination_file_name = "/Securonix/file1.txt"
    f = open("/Securonix/file1.txt",'wb')
    bucket = validate_message(file, 'bucket')
    name = validate_message(file, 'name')
    print("here")
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket)
    blob = bucket.blob(name)
    blob.download_to_file(f)
    print('Blob {} downloaded to {}.'.format(
        name,
        destination_file_name))


def validate_message(message, param):
    var = message.get(param)
    if not var:
        raise ValueError('{} is not provided. Make sure you have \
                          property {} in the request'.format(param, param))
    return var

1 个答案:

答案 0 :(得分:0)

云功能执行环境为totally read-only except for /tmp/,因此您必须下载到该目录。

第二个问题(以及为什么看到FileNotFoundError而不是PermissionError的原因是,云功能运行时不存在/Securonix/目录。 open()不会为您创建新目录,您必须先创建目录,然后才能在其中创建文件。

此外:别忘了delete the file when you are done,因为它存储在内存中。