반응형
입력 유형 = 파일에서 선택한 이미지를 반응으로 표시하는 방법JS
컴퓨터에서 선택한 이미지를 웹 앱에 표시하려고 합니다.나는 내가 고치려는 질문에 대해 다음과 같은 질문을 언급했다.
서버에 데이터를 보내지 않고 선택한 이미지를 표시하는 방법
저는 html 파트가 이렇게 있어요.
<div className="add_grp_image_div margin_bottom">
<img src={img_upload} className="add_grp_image"/>
<input type="file" className="filetype" id="group_image"/>
<span className="small_font to_middle">Add group image</span>
<img id="target"/>
</div>
선택한 이미지를 다음 위치에 표시합니다.
<img id="target"/>
어떻게 해야 하죠?
참조했습니다.FileReader
문서도 참조해 주세요.
https://developer.mozilla.org/en-US/docs/Web/API/FileReader
이거 드셔보세요
<input type="file" onChange={this.onImageChange} className="filetype" id="group_image"/>
클래스에 메서드 추가
onImageChange = (event) => {
if (event.target.files && event.target.files[0]) {
let reader = new FileReader();
reader.onload = (e) => {
this.setState({image: e.target.result});
};
reader.readAsDataURL(event.target.files[0]);
}
}
또는 를 사용할 수 있습니다.URL.createObjectURL
onImageChange = (event) => {
if (event.target.files && event.target.files[0]) {
this.setState({
image: URL.createObjectURL(event.target.files[0])
});
}
}
그리고 이미지 표시
<img id="target" src={this.state.image}/>
후크 버전의 경우:
const [image, setImage] = useState(null)
const onImageChange = (event) => {
if (event.target.files && event.target.files[0]) {
setImage(URL.createObjectURL(event.target.files[0]));
}
}
return (
<div>
<input type="file" onChange={onImageChange} className="filetype" />
<img src={image} alt="preview image" />
</div>
)
최근에 비슷한 기능이 필요하다는 것을 알게 되었습니다.다음은 다음을 사용한 구현입니다.hooks
.
export default function App() {
const [image, setImage] = React.useState("");
const imageRef = React.useRef(null);
function useDisplayImage() {
const [result, setResult] = React.useState("");
function uploader(e) {
const imageFile = e.target.files[0];
const reader = new FileReader();
reader.addEventListener("load", (e) => {
setResult(e.target.result);
});
reader.readAsDataURL(imageFile);
}
return { result, uploader };
}
const { result, uploader } = useDisplayImage();
return (
<div className="App">
<input
type="file"
onChange={(e) => {
setImage(e.target.files[0]);
uploader(e);
}}
/>
{result && <img ref={imageRef} src={result} alt="" />}
</div>
);
}
나는 커스텀을 만들었다.hook
앱 내 어디에서나 재사용할 수 있습니다.그hook
이미지를 반환하다src
및 그uploader
function
이미지src
다음으로 에 링크할 수 있습니다.<img src={..} />
그 다음에input
거스름돈은 그냥 통과할 수 있습니다.e
에게uploader
function
.
잘 됐으면 좋겠다
<form onSubmit={form => submitForm(form)}>
<input
accept="image/*"
onChange={onImageChange}
className={classes.inputImage}
id="contained-button-file"
multiple
name="image"
type="file"
/>
<label htmlFor="contained-button-file">
<IconButton component="span">
<Avatar
src={mydata.imagePreview}
style={{
margin: "10px",
width: "200px",
height: "200px"
}}
/>
</IconButton>
</label>
<Button
type="submit"
variant="outlined"
className={classes.button}
>
Default
</Button>
</form>
on Image Change
const onImageChange = event => {
if (event.target.files && event.target.files[0]) {
let reader = new FileReader();
let file = event.target.files[0];
reader.onloadend = () => {
setData({
...mydata,
imagePreview: reader.result,
file: file
});
};
reader.readAsDataURL(file);
}
};
제출 양식
const submitForm = form => {
form.preventDefault();
const formData = new FormData();
formData.append("image", mydata.file);
// for (var pair of formData.entries()) {
// console.log(pair[1]);
// }
const config = {
headers: {
"content-type": "multipart/form-data"
}
};
axios
.post("api/profile/upload", formData, config)
.then(response => {
alert("The file is successfully uploaded");
})
.catch(error => {});
};
언급URL : https://stackoverflow.com/questions/43992427/how-to-display-a-image-selected-from-input-type-file-in-reactjs
반응형
'programing' 카테고리의 다른 글
Woocommerce에서 활성화된 모든 결제 방법 나열 (0) | 2023.02.27 |
---|---|
Oracle 테이블이 마지막으로 업데이트된 시기를 확인하는 방법 (0) | 2023.02.27 |
Oracle에서는 뷰를 통해 레코드를 삽입하거나 업데이트할 수 있습니까? (0) | 2023.02.27 |
세션이 만료되었습니다. 다시 로그인하십시오. (0) | 2023.02.27 |
GUID에 의한 투고 취득 (0) | 2023.02.27 |