Я нашел ответ на свой вопрос, мне пришлось изменить некоторые другие ответы из SO вопросов, которые касались только моего вопроса.Вот что я нашел:
Это на клиенте загрузки, в функции, вызываемой при загрузке файла:
let inp = document.getElementById("file_input");
let reader = new FileReader();
reader.onload = function(){
send_off_to_other_clients(reader.result);
}
reader.readAsBinaryString(inp.files[0]);
На других клиентах:
<script>
function get_blob_from_string (string, type, name) {
let array = new Uint8Array(string.length);
for (let i = 0; i < string.length; i++){
array[i] = string.charCodeAt(i);
}
let end_file = new Blob([array], {type: type, name: name});
let a = document.createElement("a");
a.href = URL.createObjectURL(end_file);
a.download = name;
a.target = "_blank";
a.click();
}
</script>
end_file - это версия, возвращаемая в BLOB-объект, и затем я создаю тег привязки для его загрузки.Возможно, это не "правильно", но это работает.