MCPcopy Create free account
hub / github.com/bewcloud/bewcloud / uploadFileChunked

Function uploadFileChunked

public/components/files/MainFiles.js:93–126  ·  view source on GitHub ↗
(chosenFile, parentPath)

Source from the content-addressed store, hash-verified

91 directories.value = [...result.newDirectories];
92 }
93 async function uploadFileChunked(chosenFile, parentPath) {
94 const totalChunks = Math.ceil(chosenFile.size / CHUNK_SIZE_BYTES);
95 const uploadId = crypto.randomUUID();
96 const pathInView = path.value;
97 for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {
98 uploadProgress.value = `Uploading ${chosenFile.name} (${chunkIndex + 1}/${totalChunks})…`;
99 const start = chunkIndex * CHUNK_SIZE_BYTES;
100 const end = Math.min(start + CHUNK_SIZE_BYTES, chosenFile.size);
101 const chunkBlob = chosenFile.slice(start, end);
102 const requestBody = new FormData();
103 requestBody.set('upload_id', uploadId);
104 requestBody.set('chunk_index', String(chunkIndex));
105 requestBody.set('total_chunks', String(totalChunks));
106 requestBody.set('path_in_view', pathInView);
107 requestBody.set('parent_path', parentPath);
108 requestBody.set('name', chosenFile.name);
109 requestBody.set('chunk', chunkBlob);
110 const response = await fetch(`/api/files/upload-chunk`, {
111 method: 'POST',
112 body: requestBody
113 });
114 if (!response.ok) {
115 throw new Error(`Failed to upload chunk ${chunkIndex + 1}/${totalChunks}. ${response.statusText} ${await response.text()}`);
116 }
117 const result = await response.json();
118 if (!result.success) {
119 throw new Error(`Failed to upload chunk ${chunkIndex + 1}/${totalChunks}!`);
120 }
121 if (result.isComplete) {
122 files.value = [...result.newFiles];
123 directories.value = [...result.newDirectories];
124 }
125 }
126 }
127 function onClickUploadFile(uploadDirectory = false) {
128 const fileInput = document.createElement('input');
129 fileInput.type = 'file';

Callers 1

onClickUploadFileFunction · 0.70

Calls 2

fetchFunction · 0.85
setMethod · 0.80

Tested by

no test coverage detected