2023-04-13 13:27:13 -04:00

49 lines
1.1 KiB
TypeScript

import type { MediaField } from '../interface';
interface AssetProxyArgs {
path: string;
url?: string;
file?: File;
field?: MediaField;
}
export default class AssetProxy {
url: string;
fileObj?: File;
path: string;
field?: MediaField;
constructor({ url, file, path, field }: AssetProxyArgs) {
this.url = url ? url : file ? window.URL.createObjectURL(file as Blob) : '';
this.fileObj = file;
this.path = path;
this.field = field;
}
toString(): string {
return this.url;
}
async toBase64(): Promise<string> {
const blob = await fetch(this.url).then(response => response.blob());
if (blob.size <= 0) {
return '';
}
const result = await new Promise<string>(resolve => {
const fr = new FileReader();
fr.onload = (readerEvt): void => {
const binaryString = readerEvt.target?.result || '';
resolve(binaryString.toString().split('base64,')[1]);
};
fr.readAsDataURL(blob);
});
return result;
}
}
export function createAssetProxy({ url, file, path, field }: AssetProxyArgs): AssetProxy {
return new AssetProxy({ url, file, path, field });
}