Skip to content

Commit ccfd522

Browse files
committed
upload progress
1 parent dae0043 commit ccfd522

File tree

2 files changed

+43
-28
lines changed

2 files changed

+43
-28
lines changed

web/index/src/Uploader/Uploader.js

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { React, useState } from 'react';
22
import './Uploader.css';
33
import { FileUpload } from 'primereact/fileupload';
4+
import { ProgressBar } from 'primereact/progressbar';
45

56
const Uploader = (props) => {
67
const [serverHost] = useState(window.location.host.includes("localhost") ? "http://localhost:8080" : "")
@@ -13,47 +14,60 @@ const Uploader = (props) => {
1314
console.log("progress", filename, event)
1415
}
1516

16-
const uploadHandler = function ({ files }) {
17+
const uploadChunk = function (chunk, filename, chunkId) {
18+
console.log("uploading chunk", filename)
19+
1720

18-
const uploadChunk = function (chunk, filename, chunkId) {
19-
console.log("uploading chunk", filename)
20-
let progressBar = {
21-
chunkId: chunkId,
22-
filename: filename,
23-
loaded: 0,
24-
total: 0
25-
}
26-
setUploadProgress([...uploadProgress, progressBar])
21+
let formData = new FormData();
22+
formData.append("demoFile", chunk, filename);
2723

28-
let formData = new FormData();
29-
formData.append("demoFile", chunk, filename);
30-
31-
let xhr = new XMLHttpRequest();
32-
xhr.upload.addEventListener('progress', (e) => {
33-
// TODO: set new state with progresses
34-
console.log("progress", filename)
35-
progressBar.loaded = e.loaded
36-
progressBar.total = e.total
37-
});
38-
xhr.onreadystatechange = (xhr, event) => {
39-
console.log("onreadystatechange", xhr, event)
40-
};
41-
xhr.open('POST', serverHost + "/match/upload", true);
42-
xhr.withCredentials = props.withCredentials;
43-
xhr.send(formData);
44-
}
24+
let xhr = new XMLHttpRequest();
25+
xhr.upload.addEventListener('progress', (e) => {
26+
// TODO: set new state with progresses
27+
console.log("progress", uploadProgress)
28+
setUploadProgress((old) => old.map(p => {
29+
if (p.chunkId === chunkId) {
30+
return {
31+
chunkId: chunkId,
32+
filename: filename,
33+
loaded: e.loaded,
34+
total: e.total
35+
}
36+
} else {
37+
return p
38+
}
39+
}))
40+
});
41+
xhr.onreadystatechange = (xhr, event) => {
42+
console.log("onreadystatechange", xhr, event)
43+
};
44+
xhr.open('POST', serverHost + "/match/upload", true);
45+
xhr.send(formData);
46+
}
4547

48+
const uploadHandler = function ({ files }) {
4649
const [file] = files;
4750
const chunkSize = 1024 * 1024 * 30; // 30MB
4851

4952
let start = 0;
5053
let chunkNo = 0;
5154
while (start < file.size) {
55+
const newUp = {
56+
chunkId: chunkNo,
57+
filename: file.name + "_" + chunkNo,
58+
loaded: 0,
59+
total: 0
60+
}
61+
setUploadProgress(old => [...old, newUp])
5262
uploadChunk(file.slice(start, start + chunkSize), file.name + "_" + chunkNo, chunkNo++);
5363
start += chunkSize;
5464
}
5565
}
5666

67+
const valueTemplate = function(p, percent) {
68+
return p.filename
69+
}
70+
5771
return (
5872
<div>
5973
<FileUpload
@@ -69,7 +83,7 @@ const Uploader = (props) => {
6983
auto />
7084
<div>
7185
{uploadProgress.map((p) => (
72-
<div key={p.chunkId}>{p.filename} - {p.loaded}/{p.total}</div>
86+
<ProgressBar key={p.chunkId} value={(p.loaded/p.total) * 100} displayValueTemplate={(percent) => valueTemplate(p, percent)} />
7387
))}
7488
</div>
7589
</div>

web/index/src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import './index.css';
44
import App from './App';
55
import reportWebVitals from './reportWebVitals';
66
import { PrimeReactProvider } from "primereact/api";
7+
import "primereact/resources/themes/lara-light-cyan/theme.css";
78

89
const root = ReactDOM.createRoot(document.getElementById('root'));
910
root.render(

0 commit comments

Comments
 (0)