PluginProbe ʕ •ᴥ•ʔ
Presto Player / 2.2.2
Presto Player v2.2.2
4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / blocks / shared / media / chunk-upload.js
presto-player / src / admin / blocks / shared / media Last commit date
MediaFolder.js 5 years ago MediaItem.js 5 years ago MediaPopup.js 3 years ago MediaPopupTemplate.js 3 years ago chunk-upload.js 5 years ago styles.js 5 years ago
chunk-upload.js
76 lines
1 /**
2 * Upload files in chunks
3 * Based on: https://github.com/deliciousbrains/wp-dbi-file-uploader
4 */
5 export default function ({ file, path, onProgress, onComplete, onError }) {
6 let reader = {};
7 let chunk = 0;
8 let cancelled = false;
9
10 // get max upload size, max out at 16mb chunks
11 const max_request_size = Math.min(
12 prestoPlayerAdmin.wp_max_upload_size - 1000000,
13 15900000
14 );
15 let slice_size = Math.max(max_request_size, 1900000); // ~2MB fallback as minimum
16 slice_size = Math.min(slice_size, 104857600); // make the max size 100MB
17
18 // export percent done
19 let percent_done;
20
21 // chunk upload
22 const chunkUpload = function () {
23 chunk = 0;
24
25 reader = new FileReader();
26 upload_file(0);
27 return this;
28 };
29
30 // upload file
31 const upload_file = async (start) => {
32 const next_slice = start + slice_size + 1;
33 const blob = file.slice(start, next_slice);
34 const chunks = Math.ceil(file.size / (slice_size + 1));
35 chunk++;
36 onProgress((chunk / chunks) * 100);
37
38 const body = new FormData();
39 body.append("file", blob);
40 body.append("name", file.name);
41 body.append("chunk", chunk);
42 body.append("chunks", chunks);
43
44 try {
45 const file_url = await wp.apiFetch({
46 path,
47 method: "POST",
48 body,
49 });
50
51 if (cancelled) {
52 console.log("cancelled");
53 return;
54 }
55
56 if (next_slice < file.size) {
57 onProgress(percent_done);
58 upload_file(next_slice);
59 } else {
60 onComplete(file_url);
61 }
62 } catch (e) {
63 onError(e);
64 console.error(e);
65 }
66 };
67
68 chunkUpload();
69
70 return {
71 cancel: () => {
72 cancelled = true;
73 },
74 };
75 }
76