跳到主要内容

NameFile 参数

NameFile 是 suanpan-core 0.16.23 新增的一个参数类型,与 File 类型相比,该类型能够在上传对象存储时完整的保存文件名,方便下游组件根据不同文件后缀或不同名称进行操作。

!!! warning "注意"

1. NameFile 的输出桩只能接 NameFile 的输入桩,其与 File 参数不兼容,不能混合使用;
2. NameFile 会将大量文件保存到对象存储,需要开发者主动清理,以免文件塞满存储;

发送文件示例:

发送文件与 File 参数类似,消息处理函数中直接返回文件路径,sdk 会自动将文件上传到对象存储,并删除此文件。

import suanpan
import os
import random
import string
from suanpan.app import app
from suanpan.app.arguments import Json, NameFile
from suanpan.log import logger


@app.input(Json(key="inputData1", alias="user_text", default="Suanpan"))
@app.output(NameFile(key="outputData1"))
def hello_world(context):
args = context.args
logger.info(f'hello world: {args}')

name = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))
filename = os.path.join('tmp', f'{name}.txt')
with open(filename, 'w') as f:
f.write(name)

# 发送的文件会自动删除
return filename


if __name__ == "__main__":
suanpan.run(app)

接收文件示例:

args.inputData1 获得的输入桩参数是文件的对象存储地址,NameFile 不会自动下载文件,开发者需要自己通过 storage.download 下载相应文件。

import suanpan
from suanpan.app import app
from suanpan.app.arguments import Json, NameFile
from suanpan.log import logger
from suanpan.storage import storage


@app.input(NameFile(key="inputData1"))
@app.output(Json(key="outputData1", alias="result"))
def hello_world(context):
args = context.args
logger.info(f'hello world: {args}')
storage.download(args.inputData1, 'tmp/recv.txt')
with open('tmp/recv.txt', 'r') as f:
lines = f.readlines()

return f'Hello World! {lines}'


if __name__ == "__main__":
suanpan.run(app)