简体   繁体   English

使用 VueJS、axios 和 Laravel 上传文件

[英]Uploading files with VueJS, axios and Laravel

Hello I am building one project.您好,我正在构建一个项目。 Where user can send up to 5 images and up to 10 songs with the text.用户最多可以发送 5 张图片和最多 10 首带有文本的歌曲。 But when I send request to the server, where I handle with Laravel, I can't get those files.但是当我向服务器发送请求时,我用 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>

I put my front end stuff above and in my Laravel side I just return all requests:我把前端的东西放在上面,在我的 Laravel 端我只返回所有请求:

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

And these are what I get from request:这些是我从请求中得到的:

图片

图 2

图 3

I couldn't found what is wrong.我找不到问题所在。 Thank you in advance.先感谢您。

this my solutuion 这是我的解决方案

 export default { data (){ return { attachment : { name : null,file: null } } }, methods : { onFileChange(event) { this.attachment.file = event.target.files[0] }, attachmentCreate() { var form = new FormData(); form.append('name',this.attachment.name); form.append('file',this.attachment.file); this.$http.post('attachment',form).then(response=>{ console.log("oke") }) }, } } 
 <input type="file" class="form-control" @change="onFileChange"> 

Oh yeah! 哦耶! you're missing this part. 你错过了这部分。 You need to define this. 你需要定义它。

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

Check this post, maybe your problem is solved:看看这个帖子,也许你的问题已经解决了:

[https://stackoverflow.com/questions/55895941/success-upload-file-via-postman-but-fail-on-front-end-vue/73698108#73698108][1] [https://stackoverflow.com/questions/55895941/success-upload-file-via-postman-but-fail-on-front-end-vue/73698108#73698108][1]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM