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

时间:2019-08-26 20:44:14

标签: python google-cloud-functions

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

我相信我仅有的两个选择是检索文件的二进制文件(该文件在任何地方都找不到),或者将文件保存到tmp文件夹中,但此tmp文件夹在内存中运行。但是,我找不到很多文档。

我发现最好的是:tmp file in Google cloud Functions for Python,但是由于我不使用文本文件,因此无法正常工作。

我经常收到错误消息,指出文件或目录不存在。

我的代码如下所示(几乎与tmp file in Google cloud Functions for Python相同)

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)

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

首先是从 Google 云存储中以 blob 形式检索文件,然后转换并下载到 /tmp。您将需要 google.cloud 导入存储,这需要 google-cloudgoogle-cloud-storage 在您的 requirements.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)

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

scipy.io.wavfile.read('/tmp/audio-file.wav')

我认为 Google 的文档在这方面有点误导,因为它实际上根本不需要使用任何 os.path

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

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