Если я понимаю ваш вопрос, то вам вообще не нужна трансляция.Мне кажется, что вы пытаетесь сделать следующее:
- загрузить файл
- обработать файл и что-то сделать
- вернуть ответ, чтобы сказать, что что-тобыло сделано
Если это так, то вам вообще не нужна потоковая передача.
import sanic
app = sanic.Sanic(__name__)
def do_something(file):
print(f'doing something to {file.name}')
@app.post("/testUpload")
async def api_testUpload(request):
myfile = request.files.get('myfile')
do_something(myfile)
return sanic.response.json({
'body': myfile.body,
'name': myfile.name,
'type': myfile.type,
})
app.run(host='localhost', port=3002, auto_reload=True)
Затем вы можете поразить вашу конечную точку файлом ...
curl -i -F "myfile=@/tmp/somefile.txt" http://localhost:3002/testUpload
И вы должны увидеть в своих журналах:
[2018-10-25 10:09:56 +0300] [16051] [INFO] Goin' Fast @ http://localhost:3002
[2018-10-25 10:09:56 +0300] [16055] [INFO] Starting worker [16055]
doing something to somefile.txt
[2018-10-25 10:09:59 +0300] - (sanic.access)[INFO][127.0.0.1:39306]: POST http://localhost:3002/testUpload 200 62
И ваше возвращение
HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 62
Content-Type: application/json
{"body":"FOOBAR\n","name":"somefile.txt","type":"text\/plain"}
Теперь, я полагаю, если вы загружаете файл, и вы хотелидля потоковой передачи ответа этой загрузки, как это происходит на тот или иной запрос, это будет другой проблемой.
Надеюсь, это поможет.