У меня есть одностраничное приложение, работающее на сервере flask. в настоящее время он работает для отправки сообщений между пользователями по каналам. В качестве примера я отправляю сообщение вроде этого:
document.querySelector('#chat_msgs_form').onsubmit = () => {
var elem = document.getElementById("username_head");
const username = elem.innerHTML;
elem = document.getElementById('chat_msg_head');
var cnl = elem.innerHTML.split('#');
const channel = cnl[1];
elem = document.querySelector('#chat_msg_body');
const message = elem.value;
socket.emit('message', {'username': username, "channel": channel, "message": message});
return false;
}
на стороне html, у меня есть форма для отправки сообщений и файлов:
<form id="chat_msgs_form" class="bg-light">
<div class="row input-group">
<input id="chat_msg_body" type="text" placeholder="Type a message" class="form-control rounded-0 border-0 py-4 bg-light">
<div class="col-4">
<h3 class="tm-blue-text tm-section-title" id="chat_msg_head">#general</h3>
</div>
<div class="col-3">
<input type="file" id="file" name="file"></input>
</div>
<div class="col-2">
<button type="submit" class="btn btn-primary">Write</button>
</div>
</div>
</form>
И на стороне сервера , Я получаю сообщение вроде этого:
@socketio.on("message")
def chat(data):
mfrom = data["username"]
channel = data["channel"]
message = data["message"]
# save upto 100 messages for each channel created.
if (len(mychats[channel]) < 100):
mychats[channel].append((mfrom,message))
else:
mychats[channel] = [(mfrom,message)] + mychats[channel]
del mychats[channel][-1]
emit("msg_cast", {"username": mfrom, "channel": channel, "message": message}, broadcast=True)
вопрос в том, как добавить к клиентскому коду javascript код загрузки файла, прикрепленного через сокет, к остальной части сообщения и как сервер должен сделать, чтобы справиться с этим?