반응형
폼 없이 vuej 및 larabel을 사용하여 파일 업로드
vue.js 2.1과 Larabel 5.4를 사용하여 폼 없이 컴포넌트에서 파일을 업로드하고 있습니다.
문제:서버측에서 이 스테이트먼트는return $request->file('my_file');
null을 반환합니다.왜요?
vue 구성 요소는 다음과 같습니다.
<template>
<input id="my_file" type="file" @change="fileChanged($event)">
<button v-if="my_file" @click="update">Upload</button>
</template>
<script>
export default {
data () {
return {
my_file: null,
}
},
methods: {
fileChanged(e) {
var files = e.target.files || e.dataTransfer.files;
if (!files.length)
return;
this.createImage(files[0]);
},
createImage(file) {
var image = new Image();
var reader = new FileReader();
var vm = this;
reader.onload = (e) => {
vm.my_file = e.target.result;
};
reader.readAsDataURL(file);
},
update() {
axios.put('/api/update/', {
my_file: this.my_file,
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.log(error);
});
}
}
}
</script>
서버측에서는, 다음의 방법이 있습니다.
public function update(Request $request)
{
return $request->file('my_file');
// $request->file('my_file')->store();
}
제가 무엇을 빠뜨리고 있나요?기능을 사용할 수 있도록$request->file('my_file')->store();
파일을 업로드하기 위해 Laravel이 제공한 것입니다.
편집 http 동사를 에서 변경했습니다.put
로.post
다음과 같이 합니다.
trySomeThing () {
var data = new FormData();
var file = this.$refs.fileInput.files[0];
data.append('attachment_file', file);
data.append('msg', 'hello');
axios.post('/api/try', data)
.then(response => {
console.log(response.data)
});
},
컨트롤러에는 다음과 같은 기능이 있습니다.
public function try(Request $request)
{
if ($request->hasFile('my_file')) {
$file = $request->file('my_file');
//$file->getFilename();
return var_dump($file);
} else {
return var_dump($_POST);
}
}
요청 헤더에는 다음이 포함됩니다.
반환된 응답은 다음과 같습니다.
먼저 파일 입력에 Vue 참조를 추가합니다.
<input id="my_file" type="file" @change="fileChanged($event)" ref="fileInput">
그럼 다음 업데이트update
방법:
update() {
var data = new FormData()
var file = this.$refs.fileInput.files[0]
data.append('my_file', file)
axios.put('/api/update/', data)
.then(response => {
console.log(response.data)
})
.catch(error => {
console.log(error)
});
}
라라벨 어플리케이션:
if ($request->hasFile('my_file')) {
$file = $request->file('my_file');
dd($file);
}
상세정보: Larabel 문서
뷰는 다음과 같아야 합니다.
<template>
<div class="row">
<div class="col-md-12">
<div class="col-md-2">
<img :src="image" class="img-responsive">
</div>
<div class="col-md-8">
<input type="file" v-on:change="onFileChange" class="form-control">
</div>
<div class="col-md-2">
<button class="btn btn-success btn-block" @click="upload">Upload</button>
</div>
</div>
</div>
</template>
<style scoped>
img{
max-height: 36px;
}
</style>
<script>
export default{
data(){
return {
image: ''
}
},
methods: {
onFileChange(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length)
return;
this.createImage(files[0]);
},
createImage(file) {
let reader = new FileReader();
let vm = this;
reader.onload = (e) => {
vm.image = e.target.result;
};
reader.readAsDataURL(file);
},
upload(){
axios.post('/api/upload',{image: this.image}).then(response => {
});
}
}
}
</script>
언급URL : https://stackoverflow.com/questions/45549821/upload-a-file-using-vuejs-and-laravel-without-a-form
반응형
'programing' 카테고리의 다른 글
어떤 'MySQL-Python' 커넥터를 설치해야 합니까? (0) | 2022.09.27 |
---|---|
유니언 mysql 선택 쿼리를 사용하여 그룹화 (0) | 2022.09.27 |
간단한 Getter/Setter 코멘트 (0) | 2022.09.27 |
배열에서 매개 변수를 사용하여 URL 생성 (0) | 2022.09.20 |
JS에서 오류 유형 확인 (0) | 2022.09.20 |