gpt4 book ai didi

laravel - 使用 VueJS、axios 和 Laravel 上传文件

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:59 24 4
gpt4 key购买 nike

您好,我正在构建一个项目。用户最多可以发送 5 张图片和最多 10 首带有文本的歌曲。但是当我向使用 Laravel 处理的服务器发送请求时,我无法获取这些文件。

// my data object from VueJS
data() {
return {
formData: new FormData(),
pikir: {
body: '',
},
isLoading: false,
images: [],
songs: [],
}
}

// imagePreview method from VuejS
imagePreview(event) {
let input = event.target;
if (input.files[0]) {
if (input.files.length <= 5) {

for (let i = 0; i < input.files.length; i++) {
let reader = new FileReader();

reader.onload = e => {
this.images.push(e.target.result);
}

reader.readAsDataURL(input.files[i]);
}

Array.from(Array(event.target.files.length).keys())
.map(x => {

this.formData
.append('images',
event.target.files[x], event.target.files[x].name);

});

} else {
alert('You can upload up to 5 images');
}
}
}

// musicPreview method from VueJS
musicPreview(event) {
let input = event.target;
if (input.files.length <= 5) {
for (let i = 0; i < input.files.length; i++) {
this.songs.push(input.files[i].name.replace('.mp3', ''));
}

Array.from(Array(event.target.files.length).keys())
.map(x => {

this.formData
.append('songs',
event.target.files[x], event.target.files[x].name);

});

} else {
alert('You can upload up to 10 songs');
}
}

// sharePikir method from VueJS
sharePikir() {
this.formData.append('body', this.pikir.body);

axios.put('/api/pikirler', this.formData)
.then(response => {
this.pikir.body = '';
this.isLoading = false;
})
.catch(() => {
this.isLoading = false;
});
},
<form action="#" id="share-pikir">
<label for="pikir">
Näme paýlaşmak isleýärsiňiz? {{ pikirSymbolLimit }}
</label>

<input type="text" name="pikir" id="pikir" maxlength="255"
v-model="pikir.body"
@keyup="handleSymbolLimit()">

<div class="emoji">
<a href="#"><i class="fa fa-smile-o"></i> </a>
</div>

<div class="photo-music left">
<label for="music-upload">
<i class="fa fa-music"></i>
</label>

<input type="file" name="songs[]" id="music-upload"
accept="audio/mp3"
@change="musicPreview($event)"
multiple>

<i class="divider"></i>

<label for="image-upload">
<i class="fa fa-image"></i>
</label>

<input type="file" name="images[]" id="image-upload"
@change="imagePreview($event)"
multiple>

</div>

<div class="share right">

<button
:class="{ 'btn-medium': true, 'is-loading': isLoading }"
@click.prevent="sharePikir($event)">
Paýlaşmak
</button>

</div>

</form>

我把前端的东西放在上面,在我的 Laravel 端我只返回所有请求:

public function store(){
return request()->all();
}

这些是我从请求中得到的:

Image

Image 2

Image 3

我找不到问题所在。提前谢谢你。

最佳答案

哦对了!你错过了这部分。您需要对此进行定义。

axios.defaults.headers.post['Content-Type'] = 'multipart/form-data';

关于laravel - 使用 VueJS、axios 和 Laravel 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com