import { CloseSquareOutlined, InboxOutlined, SyncOutlined, } from "@ant-design/icons"; import { Upload } from "antd"; import { useAtom, atom } from "jotai"; import imageCompression from "browser-image-compression"; import React, { useState } from "react"; const { Dragger } = Upload; export const uploadImageAtom = atom(null); const Dropzone: React.FC = () => { const [file, setFile] = useAtom(uploadImageAtom); const [compressing, setCompressing] = useState(false); return (
<> {compressing && (
)} {file && ( <> setFile(null)} /> )} { console.log("file", file); let compressedFile: File; if (file.size / 1024 > 500) { setCompressing(true); compressedFile = await imageCompression(file, { maxSizeMB: 1, maxWidthOrHeight: 1920, useWebWorker: true, }); console.log(`compress ratio ${compressedFile.size / file.size}`); } const base64 = await new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(compressedFile || file); reader.onload = () => resolve(reader.result as string); reader.onerror = (error) => reject(error); }); setFile(base64); setCompressing(false); return false; }} > {!file && ( <>

Click or drag file to this area to upload

)}
); }; export default Dropzone;