You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Functions Python脚本临时存储处理图片方案咨询

Google Cloud Functions 临时图片存储方案

Google Cloud Functions 运行环境提供内存挂载的可写临时目录/tmp,可直接替代本地的images文件夹完成图片暂存、处理、上传全流程。该目录随函数实例生命周期存在,实例销毁后文件自动清理,完全满足临时存储需求。


具体改造步骤

1. 定义统一临时目录常量

Cloud Functions 仅/tmp目录有写入权限,其余目录均为只读,直接在代码开头定义临时路径,避免硬编码相对路径:

import os
TEMP_DIR = "/tmp"
# 兼容校验,确保目录存在
os.makedirs(TEMP_DIR, exist_ok=True)

2. 改造图片下载函数

替换原有硬编码的相对路径,使用标准路径拼接方法避免跨环境兼容问题:

import urllib.request
def dl_jpg(url, file_path, file_name):
    full_path = os.path.join(file_path, f"{file_name}.jpg")
    urllib.request.urlretrieve(url, full_path)
    return full_path

3. 改造图片优化函数

注意高版本Pillow库已经弃用Image.ANTIALIAS,替换为Image.Resampling.LANCZOS避免运行报错,同时统一使用临时目录路径:

from PIL import Image
def optimizeImage(name) -> str:
    img_path = os.path.join(TEMP_DIR, f"{name}.jpg")
    foo = Image.open(img_path)
    foo = foo.resize((525,394), Image.Resampling.LANCZOS)
    foo.save(img_path, optimize=True, quality=50)
    print(f'Optimized Image: {name}')
    return img_path

4. 调整主逻辑的路径传参

原有图片处理循环中,将传入的存储路径从本地的'images/'替换为TEMP_DIR即可,其余URL解析、文件名生成逻辑无需改动:

# 省略原有BeautifulSoup解析图片URL的逻辑
imageFile = []
for image in images:
    newURL = image[:-4] + 'jpg'
    print(newURL)
    name = find_between(newURL, "_img", "/origin.jpg")
    if name == "":
        name = random_name()
    print(name)
    try:
        # 替换为临时目录常量
        dl_jpg(newURL, TEMP_DIR, name)
    except:
        break
    try:
        path = optimizeImage(name)
    except:
        break
    imageFile.append(path)

5. 改造Firebase Storage上传逻辑

去掉原有写死索引的路径截取逻辑,用标准路径方法取文件名,上传完成后主动删除临时文件,避免同实例复用时占用内存:

photos = []
bucket = storage.bucket()
for image_path in imageFile:
    filename = os.path.basename(image_path)
    blob = bucket.blob(f'ListingImages/{ref.id}/{filename}')
    blob.upload_from_filename(image_path)
    blob.make_public()
    photos.append(blob.public_url)
    # 上传完成主动删除临时文件
    os.remove(image_path)

注意事项

  • /tmp目录的可用空间与函数分配的内存大小一致,例如分配512M内存时,临时目录最多可存储512M文件,常规图片处理场景分配256M~512M内存即可满足需求,若需批量处理大尺寸图片可适当调高内存配置。
  • 函数实例在冷启动后短时间内被多次触发时会被复用,/tmp内的残留文件会保留,因此建议上传完成后主动删除临时文件,或生成文件名时增加随机后缀避免重名覆盖。
  • 不要在/tmp之外的路径尝试写入文件,会直接触发权限报错。

内容的提问来源于stack exchange,提问作者Rene Alas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:19:06