Python3.9环境Google Cloud Functions如何将文件下载到根目录
Google Cloud Function 导入自定义字体文件操作方案
首先明确:你之前尝试通过控制台终端访问指定函数目录的操作无法实现,Cloud Function 是无状态 Serverless 服务,没有可供外部登陆操作的持久化文件系统,所有静态资源都需要在部署环节打包上传,运行时仅/tmp目录支持临时写入,实例销毁后写入内容会自动清除。
有两种可落地的实现方式:
方案1:部署时打包到代码包(优先推荐)
这种方式的字体随函数镜像固化,每次冷启动都不需要重复下载,调用效率最高,操作步骤如下:
- 下载Balthazar字体的TTF/OTF格式源文件到本地
- 在你本地的Cloud Function项目根目录下新建
fonts文件夹,将字体文件存入该文件夹,最终目录结构参考:
函数根目录/ ├── main.py(函数入口文件) ├── requirements.txt(依赖声明文件) └── fonts/ └── Balthazar-Regular.ttf
- 部署函数时将整个目录一起上传:如果使用gcloud命令行部署,直接在项目根目录执行
gcloud functions deploy命令即可自动打包上传;如果使用控制台部署,将整个目录打包为ZIP文件,在函数编辑页选择「上传ZIP包」选项上传即可。 - 部署完成后,你在函数代码中可以直接通过相对路径
./fonts/Balthazar-Regular.ttf调用该字体。
方案2:运行时动态下载到临时目录
如果不想把字体文件打包到代码包中,可以在函数执行逻辑中添加下载逻辑,将字体存到运行时临时目录/tmp下,示例代码如下:
import requests import os # 替换为你的函数入口名称 def handler(request): font_path = "/tmp/Balthazar-Regular.ttf" # 仅当本地临时目录无字体文件时下载,避免重复请求 if not os.path.exists(font_path): # 替换为你的字体文件直链地址 font_download_url = "你的字体直链地址" resp = requests.get(font_download_url, timeout=10) resp.raise_for_status() with open(font_path, "wb") as f: f.write(resp.content) # 后续业务逻辑中直接使用font_path路径调用字体即可 return "执行完成"
注意事项
- 打包到代码包的文件总大小不能超过Cloud Function的代码包限制:未压缩状态最大100MB,压缩ZIP包最大10MB,字体文件体积较小完全符合要求。
- 运行时写入
/tmp目录的文件仅在当前实例的生命周期内有效,实例销毁后会被清空,同项目不同函数、同一函数的不同实例之间的/tmp目录完全隔离。
内容的提问来源于stack exchange,提问作者jason
相关产品推荐
相关产品推荐

