Google Cloud Functions中的tmp文件(适用于Python)

时间:2018-07-23 22:15:13

标签: python-3.x google-cloud-functions

Python在Google云功能上运行得很不错,但是用于tmp文件。这是我的简化代码:

FILE_PATH = "{}/report.pdf".format(tempfile.gettempdir())
pdf.output(FILE_PATH)
...
with open(FILE_PATH,'rb') as f:
    data = f.read()
    f.close()
encoded = base64.b64encode(data).decode()

attachment = Attachment() 
attachment.content = str(encoded)
attachment.type = "application/pdf"
attachment.filename = "report"
attachment.disposition = "attachment"
attachment.content_id = "Report"

mail = Mail(from_email, subject, to_email, content)
mail.add_attachment(attachment)

错误是:[Errno 2]没有这样的文件或目录:'/tmp/report.pdf'

它在本地工作得很好。不幸的是,文档仅显示节点版本。解决方法也可以用于发送该PDF。

1 个答案:

答案 0 :(得分:3)

找到用于在临时文件夹中编写的Google官方文档有些困难。就我而言,我需要写一个临时目录,然后使用GCF将其上传到Google云存储。

写在Google Cloud Functions的临时目录中,它将消耗为此功能配置的内存资源。

创建文件并使用它后,建议将其从临时目录中删除。我使用此代码段在GCF(Python 3.7)中将CSV写入临时目录。

import pandas as pd
import os
import tempfile
from werkzeug.utils import secure_filename


def get_file_path(filename):
    file_name = secure_filename(filename)
    return os.path.join(tempfile.gettempdir(), file_name)

def write_temp_dir():
    data = [['tom', 10], ['nick', 15]] 
    df = pd.DataFrame(data, columns = ['Name', 'Age'])
    name = 'example.csv'
    path_name = get_file_path(name)
    df.to_csv(path_name, index=False)
    os.remove(path_name)