### What problem does this PR solve? feat: add file icon to table of FileManager #345 fix: modify datasetDescription ### Type of change - [x] New Feature (non-breaking change which adds functionality)
88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
import { UploadFile } from 'antd';
|
|
|
|
export const transformFile2Base64 = (val: any): Promise<any> => {
|
|
return new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.readAsDataURL(val);
|
|
reader.onload = (): void => {
|
|
resolve(reader.result);
|
|
};
|
|
reader.onerror = reject;
|
|
});
|
|
};
|
|
|
|
export const transformBase64ToFile = (
|
|
dataUrl: string,
|
|
filename: string = 'file',
|
|
) => {
|
|
let arr = dataUrl.split(','),
|
|
bstr = atob(arr[1]),
|
|
n = bstr.length,
|
|
u8arr = new Uint8Array(n);
|
|
|
|
const mime = arr[0].match(/:(.*?);/);
|
|
const mimeType = mime ? mime[1] : 'image/png';
|
|
|
|
while (n--) {
|
|
u8arr[n] = bstr.charCodeAt(n);
|
|
}
|
|
return new File([u8arr], filename, { type: mimeType });
|
|
};
|
|
|
|
export const normFile = (e: any) => {
|
|
if (Array.isArray(e)) {
|
|
return e;
|
|
}
|
|
return e?.fileList;
|
|
};
|
|
|
|
export const getUploadFileListFromBase64 = (avatar: string) => {
|
|
let fileList: UploadFile[] = [];
|
|
|
|
if (avatar) {
|
|
fileList = [{ uid: '1', name: 'file', thumbUrl: avatar, status: 'done' }];
|
|
}
|
|
|
|
return fileList;
|
|
};
|
|
|
|
export const getBase64FromUploadFileList = async (fileList?: UploadFile[]) => {
|
|
if (Array.isArray(fileList) && fileList.length > 0) {
|
|
const file = fileList[0];
|
|
const originFileObj = file.originFileObj;
|
|
if (originFileObj) {
|
|
const base64 = await transformFile2Base64(originFileObj);
|
|
return base64;
|
|
} else {
|
|
return file.thumbUrl;
|
|
}
|
|
// return fileList[0].thumbUrl; TODO: Even JPG files will be converted to base64 parameters in png format
|
|
}
|
|
|
|
return '';
|
|
};
|
|
|
|
export const downloadFile = ({
|
|
url,
|
|
filename,
|
|
target,
|
|
}: {
|
|
url: string;
|
|
filename?: string;
|
|
target?: string;
|
|
}) => {
|
|
const downloadElement = document.createElement('a');
|
|
downloadElement.style.display = 'none';
|
|
downloadElement.href = url;
|
|
if (target) {
|
|
downloadElement.target = '_blank';
|
|
}
|
|
downloadElement.rel = 'noopener noreferrer';
|
|
if (filename) {
|
|
downloadElement.download = filename;
|
|
}
|
|
document.body.appendChild(downloadElement);
|
|
downloadElement.click();
|
|
document.body.removeChild(downloadElement);
|
|
};
|