Итак, я создал небольшую программу-колбу, которая будет принимать файл, выполнять некоторую обработку и возвращать поток данных, используя yield
.
Я использую HTML-форму для загрузки и отправки файла. Форма отправляет файл в скрипт Python и возвращает результат. Проблема в том, что вывод представлен на другой странице из-за атрибута действия формы, тогда как мне нужен вывод на той же странице. Возможно внутри тега div
.
index.html
<script>
if (!!window.EventSource) {
var source = new EventSource('/upload');
source.onmessage = function(e) {
console.log(e)
var byte = e.data;
var res = byte.split(/\s/);
console.log(res[0])
$("#morse").text(res[0].slice(1,));
}
}
</script>
<form action="/upload" method=post enctype=multipart/form-data >
<p><input type="file" name="file" >
<input type="submit" value="Upload" id="search_form_input">
</form>
<div id="morse" class="info">nothing received yet</div> // this is where is need my data
Код Python
@app.route('/')
def index():
return render_template('index.html')
@app.route("/upload", methods=['GET', 'POST'])
def streambyte():
if request.method == 'POST':
f = request.files['file']
list_of_items = unAssign(f) # some file processing
def events():
for i in list_of_items:
yield "data: %s\n\n" % (i)
time.sleep(1) # an artificial delay
return Response(events(), content_type='text/event-stream')
Это поток данных на http://localhost:5000/upload
, тогда как мне нужно на http://localhost:5000
.
Я попытался использовать перенаправление с Response, но он не смог сказать TypeError: 'generator' object is not callable