batch uploads on frontend
This commit is contained in:
@@ -14,6 +14,8 @@ import {
|
||||
postSignedFileJson
|
||||
} from "../clients/fileClient";
|
||||
|
||||
const MAX_FILES_PER_UPLOAD_BATCH = 10;
|
||||
|
||||
export const getAwaitingSubmissionFromBlob = (containerName) => {
|
||||
const route = buildFileQuery("/api/file/getawaitingsubmissionfromblob", {
|
||||
container: containerName
|
||||
@@ -130,21 +132,69 @@ export const uploadFiles = async (
|
||||
}
|
||||
};
|
||||
|
||||
export const uploadSingleFile = async (filesObj, containerID, casefolderID) => {
|
||||
export const uploadSingleFile = async (
|
||||
filesObj,
|
||||
containerID,
|
||||
casefolderID,
|
||||
options = {}
|
||||
) => {
|
||||
let files = filesObj;
|
||||
|
||||
var formData = new FormData();
|
||||
formData.append("containerID", containerID);
|
||||
formData.append("casefolderID", casefolderID);
|
||||
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
formData.append(files[i].name, files[i]);
|
||||
}
|
||||
|
||||
var queryUrl = "/api/file/uploadsinglefile";
|
||||
|
||||
try {
|
||||
return await postSignedFileJson(queryUrl, formData);
|
||||
const queryUrl = "/api/file/uploadsinglefile";
|
||||
const uploadResponse = {
|
||||
data: [],
|
||||
invalidFiles: []
|
||||
};
|
||||
let cumulativeUploaded = 0;
|
||||
let cumulativeInvalid = 0;
|
||||
const totalFiles = files.length;
|
||||
const totalChunks = Math.ceil(totalFiles / MAX_FILES_PER_UPLOAD_BATCH);
|
||||
|
||||
for (
|
||||
let index = 0;
|
||||
index < files.length;
|
||||
index += MAX_FILES_PER_UPLOAD_BATCH
|
||||
) {
|
||||
const chunkIndex =
|
||||
Math.floor(index / MAX_FILES_PER_UPLOAD_BATCH) + 1;
|
||||
const fileChunk = files.slice(
|
||||
index,
|
||||
index + MAX_FILES_PER_UPLOAD_BATCH
|
||||
);
|
||||
const formData = new FormData();
|
||||
|
||||
formData.append("containerID", containerID);
|
||||
formData.append("casefolderID", casefolderID);
|
||||
|
||||
for (let i = 0; i < fileChunk.length; i++) {
|
||||
formData.append(fileChunk[i].name, fileChunk[i]);
|
||||
}
|
||||
|
||||
const chunkResult = await postSignedFileJson(queryUrl, formData);
|
||||
|
||||
if (Array.isArray(chunkResult?.data)) {
|
||||
uploadResponse.data.push(...chunkResult.data);
|
||||
cumulativeUploaded += chunkResult.data.length;
|
||||
}
|
||||
|
||||
if (Array.isArray(chunkResult?.invalidFiles)) {
|
||||
uploadResponse.invalidFiles.push(...chunkResult.invalidFiles);
|
||||
cumulativeInvalid += chunkResult.invalidFiles.length;
|
||||
}
|
||||
|
||||
if (typeof options.onChunkComplete === "function") {
|
||||
options.onChunkComplete({
|
||||
chunkIndex,
|
||||
totalChunks,
|
||||
totalFiles,
|
||||
cumulativeUploaded,
|
||||
cumulativeInvalid,
|
||||
processedFiles: cumulativeUploaded + cumulativeInvalid
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return uploadResponse;
|
||||
} catch (error) {
|
||||
consoleLogger(error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user