input μμμ νμΌμ μ¬λ €λκ³ νμΌμ μ½λ κ³Όμ μμ λ€μκ³Ό κ°μ μλ¬κ° λ°μνμλ€.
DOMException: The requested file could not be read,
typically due to permission problems that have occurred
after a reference to a file was acquired.
μλ¬λ₯Ό λ°μνλ 쑰건μ ν¬κ² 2κ°μ§ κ²½μ°μμ μλ¬κ° λ°μνμλ€.
input μμμ νμΌμ μ¬λ €λκ³ νμΌμ λν μ°Έμ‘°λ₯Ό μ»μ ν μλ³Έ νμΌμ λν λ³κ²½μ΄ μΌμ΄λμ νμΌμ λν κΆν λ¬Έμ κ° λ°μνμ¬ ν΄λΉ μλ¬κ° λ°μν κ²μΌλ‘ νμ λμλ€.
κ·Έλ λ€λ©΄ input μμμμ νμΌμ λ€μ μ ννμ¬ νμΌμ λν μ°Έμ‘°λ₯Ό λ€μ μ»μΌλ©΄ λμ§ μμκΉ λΌλ μκ°μ νμλ€. νμ§λ§ μλ‘μ΄ λ¬Έμ μ μ΄ λ°μνκ² λμλ€.
input μμλ λμΌν νμΌλͺ μ νμΌμ λ€μ μ ννλ©΄ μλ‘κ² νμΌμ΄ μ°Έμ‘°λμ§ μλ λ€λ μ μ΄μλ€.
λ€λ₯Έ νμΌλͺ μ μ νν΄μΌ μλ‘κ² νμΌμ λν μ λ³΄κ° μ½μμ μ°νλ κ²μ λ³Ό μκ° μλ€.
import React, { useState, useRef } from "react";
const App = () => {
const [file, setFile] = useState(null);
const fileInput = useRef();
const onChange = (e) => {
setFile(e.target.files[0]);
};
const onClick = (e) => {
e.target.value = null;
};
const readFile = () => {
if (file) {
const fileReader = new FileReader();
fileReader.onload = (e) => {
console.log(e.target.result);
};
fileReader.onerror = (e) => {
if (e.type === "error") {
fileInput.current.value = null;
return alert("μλ¬λ°μ! νμΌμ λ€μ μ νν΄μ£ΌμΈμ.");
}
};
fileReader.readAsText(file);
} else {
return alert("νμΌμ΄ μμ΅λλ€.");
}
};
return (
<div>
<div>
<input
type="file"
ref={fileInput}
onChange={onChange}
onClick={onClick}
/>
</div>
<div>
<button onClick={readFile}>νμΌ μ½κΈ°</button>
</div>
</div>
);
};
export default App;
λμΌν νμΌλͺ μ λν μ΄μλ₯Ό ν΄κ²°νκΈ° μνμ¬ input μμμ click μ΄λ²€νΈκ° λ°μνλ μκ° ν΄λΉ targetμ valueλ₯Ό nullκ°μΌλ‘ μ΄κΈ°ννλ κ³Όμ μ μ νμ μΌλ‘ μ§ννκ² λ§λ€μλ€.
νμΌ λ³κ²½μ λν μ΄μλ₯Ό ν΄κ²°νκΈ° μνμ¬ νμΌ μ°Έμ‘° κΆνμ λν μλ¬κ° λ°μν κ²½μ°μλ ν΄λΉ targetμ valueλ₯Ό nullκ°μΌλ‘ μ΄κΈ°νλ₯Ό μ§ννμλ€.
click μ΄λ²€νΈλ₯Ό ν΅νμ¬ νμΌμ λ³κ²½νκ² μλλΌ change μ΄λ²€νΈλ₯Ό ν΅νμ¬ νμΌμ μ νν κ²½μ°μ 2λ² λ°©λ²μ ν΅νμ¬ μλ¬λ₯Ό ν΄κ²°μ΄ κ°λ₯νλ€. onChange ν¨μμ ν΄λΉ targetμ valueλ₯Ό nullκ°μΌλ‘ μ΄κΈ°ν νλ λ‘μ§μ λ£μΌλ©΄ κ³μ input μμμ νμΌμ΄ μκΈ° λλ¬Έμ onChange ν¨μμλ μ΄κΈ°ν λ‘μ§μ λ£μ§ μμλ€.
μ¬μ©μκ° ν΄λΉ κΈ°λ₯μ μ΄λ»κ² μ¬μ©νλμ§ μ μ μλ μν©μμ νμ μλ¬ λν μΌμ΄μ€λ₯Ό μ‘μλ΄λ κ³Όμ μ νμ μ€μνλ€κ³ μκ°νλ€. input μμμ μ¬λ¦° νμΌμ μμ μ νμ§ μλλ€λ 보μ₯μ΄ μκΈ° λλ¬Έμ ν΄λΉ μλ¬κ° λ°μν κ²½μ° μ μ λ€μκ² μ΅λν μλ¬ μΌμ΄μ€λ₯Ό ν΄κ²°μ£Όλ μ½λλ νμ μ€μνλ€κ³ μκ°νλ€. μΈμ λ μ°λ¦¬λ€μ μ μ λ€μ λ―ΏμΌλ©΄ μλλ€. μκ°νμ§ λͺ»ν λ°©λ²μΌλ‘ κΈ°λ₯μ μ¬μ©νκΈ° λλ¬Έμ΄λ€.