开发者社区 > 云原生 > Serverless > 正文

函数计算中,能访问本地存储吗?

函数计算中,能访问本地存储吗?
我想要实现:

  1. HTTP触发后 生成多个图片文件。
  2. 再一起压缩存到OSS里。
  3. 再删除之前的多个图片文件。这个临时"生成多个图片文件"是保存在哪里呢?

展开
收起
多麻辣哦 2024-01-23 18:57:19 41 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在函数计算中,通常无法直接访问本地存储。函数计算是一种无服务器计算服务,它为每个函数提供临时的执行环境,并且不提供持久化的本地存储。当函数执行完毕后,相关的执行环境将被销毁,包括其中的所有本地存储。

    对于您的需求,可以考虑以下解决方案:

    1. 使用云存储服务:您可以将生成的图片文件保存到云存储服务(如OSS、云盘等)中,而不是保存到本地存储。这样可以避免对本地存储的依赖,并且可以方便地进行文件的压缩和删除操作。

    2. 使用临时存储:如果您确实需要在函数计算中使用临时存储,可以考虑使用云函数提供的临时磁盘空间。但是需要注意的是,这种临时存储只在函数执行期间可用,函数执行结束后,临时存储中的数据将被清空。因此,在使用临时存储时,需要确保在函数执行结束前完成对文件的操作。

    以下是一个示例代码片段,展示了如何在函数计算中使用云存储服务保存生成的图片文件:

    import oss2
    
    # 创建OSS客户端
    auth = oss2.Auth('<access_key>', '<secret_key>')
    bucket = oss2.Bucket(auth, '<endpoint>', '<bucket_name>')
    
    # 保存图片文件到OSS
    for i in range(num_images):
        image_data = generate_image()  # 生成图片数据
        image_path = f"images/{i}.png"  # 图片保存路径
        bucket.put_object(image_path, image_data)
    
    # 压缩并上传到OSS
    zip_path = "images.zip"
    with zipfile.ZipFile(zip_path, 'w') as zip_file:
        for i in range(num_images):
            image_path = f"images/{i}.png"
            zip_file.write(image_path, arcname=f"{i}.png")
        bucket.put_object("compressed/images.zip", open(zip_path, 'rb').read())
    
    # 删除之前的多个图片文件
    for i in range(num_images):
        image_path = f"images/{i}.png"
        bucket.delete_object(image_path)
    

    请注意替换代码中的<access_key><secret_key><endpoint><bucket_name>为您自己的阿里云账户信息。

    2024-01-24 13:47:23
    赞同 展开评论 打赏
  • 可以建议用本地的/tmp 目录。不过这个是临时存储。这个文件夹的生命周期和函数实例的生命周期一致。持久化可以挂载nas或者oss。这个就一直有了。
    ——此回答整理自钉群:阿里函数计算官网客户

    2024-01-23 21:28:10
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载