如何修复 Google Cloud Functions - Python 中 /tmp 文件夹中的“没有此类文件或目录”

ama*_*ing 6 python google-cloud-functions

我需要将文件保存到 Google Cloud Functions 中的 tmp 文件夹。我正在从 Google Cloud Storage 访问该文件,然后将其发送到 Cloud Functions 来处理该文件。它是 MP4 文件,因此我无法使用纯文本文件可用的任何功能。

我相信我唯一的两个选择是检索文件的二进制文件(我在任何地方都找不到该文件的记录),或者将文件保存到 tmp 文件夹,但此 tmp 文件夹在内存中运行。然而我找不到太多这方面的文档。

我发现的最好的是:Google cloud Functions for Python 中的 tmp 文件,但是由于我没有使用文本文件,所以我无法让它工作。

我不断收到文件或目录不存在的错误。

我的代码如下所示(与Google Cloud Functions for Python 中的 tmp 文件几乎相同)

def function(file):
    name = uploadedFile['name']
    path_name = get_file_path(name)


def get_file_path(file_name):
    return os.path.join(tempfile.gettempdir(), file_name)
Run Code Online (Sandbox Code Playgroud)

我删除了一些特定于文本文件的行。

我不确定是否必须手动启用 tmp/ 文件夹,或者是否有其他方法可以解决此问题,但每当我运行该函数并提供文件时,我都会得到FileNotFoundError: [Errno 2] No such file or directory: '/tmp/filename.mp4'

我假设发生了两件事中的一件,1)在文件完成运行复制(异步运行)之前正在执行下一行代码,或者2我必须做一些事情才能启用并能够写入tmp 文件夹。

谢谢。

Yon*_*kee 2

首先是从 Google 云存储中以 blob 形式检索文件,然后转换并下载到/tmp. 您将需要google.cloud导入存储,这需要文件中的google-cloud和。google-cloud-storagerequirements.txt

bucket_name = "bucket-name"
source_blob_name = "audio-file.wav"
destination_file_name = "/tmp/audio-file.wav

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)

blob = bucket.blob(source_blob_name)
blob.download_to_filename(destination_file_name)
Run Code Online (Sandbox Code Playgroud)

现在您只需要从文件夹中读取即可/tmp。就我而言,它是一个音频文件,所以我使用scipy

scipy.io.wavfile.read('/tmp/audio-file.wav')
Run Code Online (Sandbox Code Playgroud)

我认为谷歌的文档对此有点误导,因为它实际上根本不需要任何使用os.path

参考:https://cloud.google.com/functions/docs/concepts/exec#functions-concepts-filesystem-python

如果文件夹结构匹配,您还可以/tmp使用 ZIP 传递静态文件。然而,您不会在控制台的任何地方看到这个 tmp 文件夹,但它确实在那里。