Vue Axios - с bootstrapVue и vuex, все еще проблема с загрузкой файла и текста? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть Vue SPA, и я пытаюсь загрузить некоторые изображения и текст. Я пытаюсь использовать почтальон для проверки моего серверного кода, и это работает, но моя клиентская сторона все еще ошибка. Я думаю, что все еще ошибаюсь за дескриптор req.file.

  1. addImage.vue
<template>
<div>
  <b-form-group label-cols-sm="3" description="image title" label="Title">
     <b-form-input v-model="newImage.title"></b-form-input>
  </b-form-group>

  <b-form-group label="my Image" label-for="file" label-cols-sm="2">
    <b-form-file id="file" v-model="newImage.image"></b-form-file>
  </b-form-group>

  <b-button variant="primary" class="pl-5 pr-5" @click.prevent="addImage">Save</b-button>
</div>
</template>

<script>
export default {
  data() {
    return {
      newImage: {
        title: '',
        image: null,
      },
    };
  },
  methods: {
    addImage() {
      this.$store.dispatch('addProduct', this.newProduct);
    }
  },
};

store.js
actions: {
  addImage(context, newImage) {
    const config = {
      headers: {
        token: localStorage.getItem('token'),
      },
    };

    Axios
      .post(`${baseUrl}/product`, newImage, config)
      .then(({ newImage }) => {
        context.commit('ADD_IMAGE', newImage);
      })
      .catch((err) => {
        console.log(err.message);
      });
   }
}

1 Ответ

1 голос
/ 05 октября 2019

Если вы хотите загрузить изображение, вы должны установить тип контента и создать FormData, например:

    let data = new FormData();

    for (var i = 0; i < files.length; i++) {
        let file = files.item(i);
        data.append('images[' + i + ']', file, file.name);
    }

    const config = {
        headers: { 'content-type': 'multipart/form-data' }
    }

    return axios.post('/api/images', data, config)
...