From ee3eddc6b80565f6bb458a1fd8f3a83fdd37d554 Mon Sep 17 00:00:00 2001 From: RblSb Date: Thu, 23 Oct 2025 01:30:22 +0300 Subject: Fix large file upload --- src/client/Buttons.hx | 71 +++------------------------------------------------ 1 file changed, 3 insertions(+), 68 deletions(-) (limited to 'src/client/Buttons.hx') diff --git a/src/client/Buttons.hx b/src/client/Buttons.hx index 78b1c5a..56f28d5 100644 --- a/src/client/Buttons.hx +++ b/src/client/Buttons.hx @@ -1,20 +1,15 @@ package client; -import Types.UploadResponse; import client.Main.getEl; -import haxe.Json; import haxe.Timer; import js.Browser.document; import js.Browser.window; -import js.html.Blob; import js.html.Element; import js.html.ImageElement; import js.html.InputElement; import js.html.KeyboardEvent; -import js.html.ProgressEvent; import js.html.TransitionEvent; import js.html.VisualViewport; -import js.html.XMLHttpRequest; class Buttons { static var split:Split; @@ -263,69 +258,9 @@ class Buttons { } getEl("#mediaurl-upload").onclick = e -> { - Utils.browseFile((buffer, name) -> { - name ??= ""; - name = ~/[?#%\/\\]/g.replace(name, "").trim(); - if (name.length == 0) name = "video"; - name = (window : Dynamic).encodeURIComponent(name); - - // send last chunk separately to allow server file streaming while uploading - final chunkSize = 1024 * 1024 * 5; // 5 MB - final bufferOffset = (buffer.byteLength - chunkSize).limitMin(0); - final lastChunk = buffer.slice(bufferOffset); - final chunkReq = window.fetch("/upload-last-chunk", { - method: "POST", - headers: { - "content-name": name, - }, - body: lastChunk, - }); - chunkReq.then(e -> { - e.json().then((data:UploadResponse) -> { - if (data.errorId != null) { - main.serverMessage(data.info, true, false); - return; - } - final input:InputElement = getEl("#mediaurl"); - input.value = data.url; - }); - }); - - final request = new XMLHttpRequest(); - request.open("POST", "/upload", true); - request.setRequestHeader("content-name", name); - - request.upload.onprogress = (event:ProgressEvent) -> { - var ratio = 0.0; - if (event.lengthComputable) { - ratio = (event.loaded / event.total).clamp(0, 1); - } - main.onProgressEvent({ - type: Progress, - progress: { - type: Uploading, - ratio: ratio - } - }); - } - - request.onload = (e:ProgressEvent) -> { - final data:UploadResponse = try { - Json.parse(request.responseText); - } catch (e) { - trace(e); - return; - } - if (data.errorId == null) return; - main.serverMessage(data.info, true, false); - } - request.onloadend = () -> { - Timer.delay(() -> { - main.hideDynamicChin(); - }, 500); - } - - request.send(new Blob([buffer])); + Utils.browseJsFile(file -> { + final uploader = new FileUploader(main); + uploader.uploadFile(file); }); } -- cgit v1.2.3