我需要将文件保存到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文件夹。
谢谢。
答案 0 :(得分:0)
首先是从 Google 云存储中以 blob 形式检索文件,然后转换并下载到 /tmp
。您将需要 google.cloud
导入存储,这需要 google-cloud
和 google-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 文件夹,但它就在那里。