Web: PortalSettings: Restore: Added uploading files in parts.
This commit is contained in:
parent
a8c133f4ca
commit
1aedb58356
@ -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,
|
||||
|
@ -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 (
|
||||
|
@ -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;
|
||||
|
@ -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 });
|
||||
|
Loading…
Reference in New Issue
Block a user