반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자스코테
- ReactNative
- 자바의정석
- php
- Oracle
- CSS
- react
- 스프링
- 코딩테스트
- spring
- 평일코딩
- 정보처리기사요약
- 정보처리기사실기정리
- 정보처리기사실기요약
- 오라클
- 타입스크립트
- Java의정석
- VUE
- 국비IT
- 정보처리기사실기
- 리액트
- typescript
- 국비코딩
- javascript
- 정보처리기사정리
- 이안의평일코딩
- 자바스크립트
- 자바스크립트 코딩테스트
- 리액트네이티브
- 정보처리기사
Archives
- Today
- Total
이안의 평일코딩
[Vue] 이미지 업로드 및 불러오기 본문
반응형
이미지 업로드한 것을 HTML에 보여주려면 두가지 방법이 있다.
FileReader() : 파일을 글자로 변환해준다.
URL.createObjectURL() : 이미지의 가상 URL을 생성해준다. (다만 새로고침하면 사라진다.)
=> background-image속성으로 집어넣으면 된다.
multiple을 넣으면 다수의 파일을 선택할 수 있다.
accept="image/*"를 넣으면 이미지 파일을 가져올 수 있게 기본으로 설정된다.
<input @change="upload" multiple accept="image/*" type="file" id="file" class="inputfile" />
var file = e.target.files;
file[0].type과 같이 자바스크립트에서 .type 사용하면 image/png 와 같이 확장자 검사가 가능하다.
조건문을 사용해 일부 확장자만 가능하게끔 설정을 해주면 된다.
App.vue
<template>
<Container :image="image" />
</template>
<script>
import Container from './components/Container.vue';
axios.post()
export default {
name: 'App',
data(){
return {
image : '',
}
},
components: {
Container,
},
methods: {
upload(e){
var file = e.target.files;
let url = URL.createObjectURL(file[0]);
this.image = url;
},
},
}
</script>
URL.createobjectURL로 불러온 것을 image라는 변수에 넣은 뒤 Container 컴포넌트에 보내준다.
반응형
Container.vue
<template>
<div>
<div v-if="step==0">
<Post v-for="(a,i) in instaData" :key="i" :instaData="instaData[i]" />
</div>
<!-- 필터선택페이지 -->
<div v-if="step==1">
<div class="upload-image" :style="`background-image : url(${image})`"></div>
<div class="filters">
<FilterBox :filter="filter" :image="image" v-for="filter in filters" :key="filter">
<span>{{filter}}</span>
</FilterBox>
</div>
</div>
<!-- 글작성페이지 -->
<div v-if="step==2">
<div class="upload-image" :style="`background-image : url(${image})`"></div>
<div class="write">
<textarea @input="$emit('write', $event.target.value)" class="write-box">write!</textarea>
</div>
</div>
</div>
</template>
<script>
import Post from './Post.vue';
import FilterBox from './FilterBox.vue';
export default {
props : {
instaData : Array,
step : Number,
image : String,
},
components: {
Post,
FilterBox,
}
}
</script>
Container에서 props를 통해 image를 데려온 뒤 :style="`background-image : url(${image})`"로 이미지를 출력할 수 있다.
반응형
'Front-end > Vue' 카테고리의 다른 글
[Vue] 라이브러리 전역에서 사용하기 (0) | 2021.05.17 |
---|---|
[Vue] props 대신 slot을 써보자 (0) | 2021.05.14 |
[Vue] 스크롤 시 헤더 색 변경 (0) | 2021.04.27 |
[Vue] 더보기 버튼 기능 구현하기 (axios로 ajax 요청) (0) | 2021.04.19 |
[Vue] 이미지 집어넣기 {backgroundImage : `url(${})`} (0) | 2021.04.19 |
Comments