URL.createObjectURL은 브라우저에서 로컬 파일을 로드하여 미리보기를 제공하는 간단한 방법이다.export default function AddProduct() {
const [preview, setPreview] = useState(""); // 이미지 미리보기 URL 저장
const onImageChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const {
target: { files },
} = event;
if (!files) return; // 파일이 없으면 종료
const file = files[0];
const url = URL.createObjectURL(file); // 파일 객체로 URL 생성
setPreview(url); // URL 상태 업데이트
};
return (
<div>
<input type="file" onChange={onImageChange} />
{preview && <img src={preview} alt="Preview" />}
</div>
);
}
arrayBuffer는 파일 데이터를 버퍼로 변환하여 서버에 저장하는 방법이다.실제 이미지 업로드로는 권장하지 않음if (data.photo instanceof File) {
const photoData = await data.photo.arrayBuffer(); // 파일 데이터를 ArrayBuffer로 변환
await fs.appendFile(`./public/${data.photo.name}`, Buffer.from(photoData)); // 서버에 파일 저장
data.photo = `/${data.photo.name}`; // 저장된 경로를 photo에 할당
}
Cloudflare Images는 이미지 업로드와 관리를 위한 유료 서비스//env
CLOUDFLARE_API_TOKEN=your_api_token
CLOUDFLARE_ACCOUNT_ID=your_account_id
CLOUDFLARE_ACCOUNT_HASH=your_account_hash
아직 유료서비스를 결제할 단계는 아닌거 같아서 간단하게 arrayBuffer나 createObjectURL를 사용해서 이미지 업로드를 해보았다. 보안 이슈로 인해 권장하지는 않지만 어떤식으로 동작하는지에 대해 자세히 알게 되는 시간이었고, 나중에 포트폴리오나 다른 작업을 하게 된다면 유료 서비스도 한번 사용해보고 싶다.