Web: PortalSettings: Restore: Added uploading files in parts.

This commit is contained in:
Tatiana Lopaeva 2023-08-28 10:51:13 +03:00
parent a8c133f4ca
commit 1aedb58356
4 changed files with 79 additions and 23 deletions

View File

@ -8,7 +8,6 @@ import { TenantStatus } from "@docspace/common/constants";
import { startRestore } from "@docspace/common/api/portal";
import { combineUrl } from "@docspace/common/utils";
import toastr from "@docspace/components/toast/toastr";
import { request } from "@docspace/common/api/client";
const ButtonContainer = (props) => {
const {
@ -28,29 +27,12 @@ const ButtonContainer = (props) => {
setTenantStatus,
isFormReady,
getStorageParams,
uploadLocalFile,
} = props;
const [isUploadingLocalFile, setIsUploadingLocalFile] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const localFileUploading = async () => {
try {
const checkedFile = await request({
baseURL: combineUrl(window.DocSpaceConfig?.proxy?.url, config.homepage),
method: "post",
url: `/backupFileUpload.ashx`,
responseType: "text",
data: restoreResource,
});
return checkedFile;
} catch (e) {
toastr.error(e);
setIsUploadingLocalFile(false);
return null;
}
};
const onRestoreClick = async () => {
if (isCheckedThirdPartyStorage) {
const requiredFieldsFilled = isFormReady();
@ -74,7 +56,7 @@ const ButtonContainer = (props) => {
}
if (isCheckedLocalFile) {
const isUploadedFile = await localFileUploading();
const isUploadedFile = await uploadLocalFile();
if (!isUploadedFile) {
setIsLoading(false);
@ -89,6 +71,7 @@ const ButtonContainer = (props) => {
}
}
return;
try {
await startRestore(backupId, storageType, storageParams, isNotification);
setTenantStatus(TenantStatus.PortalRestore);
@ -154,11 +137,13 @@ export default inject(({ auth, backup }) => {
isFormReady,
getStorageParams,
restoreResource,
uploadLocalFile,
} = backup;
const { isRestoreAndAutoBackupAvailable } = currentQuotaStore;
const isMaxProgress = downloadingProgress === 100;
return {
uploadLocalFile,
isMaxProgress,
setTenantStatus,
isEnableRestore: isRestoreAndAutoBackupAvailable,

View File

@ -5,10 +5,10 @@ import FileInput from "@docspace/components/file-input";
const LocalFile = ({ setRestoreResource, isEnableRestore, t }) => {
const onClickInput = (file) => {
let data = new FormData();
data.append("file", file);
//let data = new FormData();
// data.append("file", file);
setRestoreResource(data);
setRestoreResource(file);
};
return (

View File

@ -8,6 +8,10 @@ import {
import toastr from "@docspace/components/toast/toastr";
import { AutoBackupPeriod } from "@docspace/common/constants";
//import api from "@docspace/common/api";
import { request } from "@docspace/common/api/client";
import { combineUrl } from "@docspace/common/utils";
import config from "PACKAGE_FILE";
import { uploadBackup } from "@docspace/common/api/files";
const { EveryDayType, EveryWeekType } = AutoBackupPeriod;
@ -617,6 +621,69 @@ class BackupStore {
setRestoreResource = (value) => {
this.restoreResource = value;
};
setChunkUploadSize = (chunkUploadSize) => {
this.chunkUploadSize = chunkUploadSize;
};
uploadFileChunks = async (requestsDataArray) => {
const length = requestsDataArray.length;
for (let index = 0; index < length; index++) {
const res = await uploadBackup(
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
"/backupFileUpload.ashx"
),
requestsDataArray[index]
);
console.log("=== CHUNKS res", res);
if (res.data.Message) return Promise.reject(res.data.Message);
}
};
uploadLocalFile = async () => {
console.log("this.restoreResource", this.restoreResource);
try {
const res = await uploadBackup(
combineUrl(
window.DocSpaceConfig?.proxy?.url,
config.homepage,
`/backupFileUpload.ashx?init=true&totalSize=${this.restoreResource.size}`
)
);
const chunkUploadSize = res.data.ChunkSize;
const chunks = Math.ceil(
this.restoreResource.size / chunkUploadSize,
chunkUploadSize
);
const requestsDataArray = [];
let chunk = 0;
while (chunk < chunks) {
const offset = chunk * chunkUploadSize;
const formData = new FormData();
formData.append(
"file",
this.restoreResource.slice(offset, offset + chunkUploadSize)
);
requestsDataArray.push(formData);
chunk++;
}
console.log("res", res, requestsDataArray, chunk);
await this.uploadFileChunks(requestsDataArray);
} catch (e) {
toastr.error(e);
return null;
}
};
}
export default BackupStore;

View File

@ -560,6 +560,10 @@ export function uploadFile(url, data) {
return axios.post(url, data);
}
export function uploadBackup(url, data) {
return axios.post(url, data);
}
export function downloadFiles(fileIds, folderIds) {
const data = { fileIds, folderIds };
return request({ method: "put", url: "/files/fileops/bulkdownload", data });