Made server return upload progress as binary instead of string

This commit is contained in:
G2-Games 2025-03-22 15:48:29 -05:00
parent a3071b4f26
commit b76ebd339c
2 changed files with 11 additions and 5 deletions

View file

@ -307,7 +307,7 @@ pub async fn websocket_upload(
hasher.update(&message);
stream.send(rocket_ws::Message::Text(json::serde_json::ser::to_string(&offset).unwrap())).await.unwrap();
stream.send(rocket_ws::Message::binary(offset.to_le_bytes().as_slice())).await.unwrap();
file.write_all(&message).await.unwrap();
@ -347,6 +347,7 @@ pub async fn websocket_upload(
file.flush().await.unwrap();
stream.send(rocket_ws::Message::Text(json::serde_json::ser::to_string(&constructed_file).unwrap())).await?;
stream.close(None).await?;
Ok(())
})))

View file

@ -220,6 +220,7 @@ async function uploadFileWebsocket(file, duration, maxSize) {
new_uri += "//" + loc.host;
new_uri += "/upload/websocket?name=" + file.name +"&size=" + file.size + "&duration=" + parseInt(duration);
const socket = new WebSocket(new_uri);
socket.binaryType = "arraybuffer";
const chunkSize = 5_000_000;
socket.addEventListener("open", (_event) => {
@ -235,14 +236,18 @@ async function uploadFileWebsocket(file, duration, maxSize) {
return new Promise(function(resolve, _reject) {
socket.addEventListener("message", (event) => {
const response = JSON.parse(event.data);
if (response.mmid == null) {
const progress = parseInt(response);
if (event.data instanceof ArrayBuffer) {
const view = new DataView(event.data);
console.log(view.getBigUint64(0, true));
const progress = parseInt(view.getBigUint64(0, true));
uploadProgressWebsocket(progress, progressBar, progressText, file.size);
} else {
// It's so over
if (!socket.CLOSED) {
socket.close();
}
const response = JSON.parse(event.data);
uploadComplete(response, 200, progressBar, progressText, linkRow);
resolve();
}