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); 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(); file.write_all(&message).await.unwrap();
@ -347,6 +347,7 @@ pub async fn websocket_upload(
file.flush().await.unwrap(); file.flush().await.unwrap();
stream.send(rocket_ws::Message::Text(json::serde_json::ser::to_string(&constructed_file).unwrap())).await?; stream.send(rocket_ws::Message::Text(json::serde_json::ser::to_string(&constructed_file).unwrap())).await?;
stream.close(None).await?;
Ok(()) Ok(())
}))) })))

View file

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