vue: ошибка V-входного файла не типа «HTMLFormElement»

на Vue добавление выбранного файла в FormData заканчивается ошибкой как в v-input-file, так и в типе ввода = «файл».

сообщение об ошибке: не удалось построить «FormData»: параметр 1 не имеет типа «HTMLFormElement».

<template>
 <Layout v-if="$store.state.user">

<v-form
      id='myform'
      name='myForm'
      class='myform'
      ref="form"
      lazy-validation
      enctype="multipart/form-data"
      method="POST"
    >
      <!-- FILE UP-LOAD -->
      <template>
        <v-file-input
          :rules="rules_fileInput"
          accept="image/png, image/jpeg, image/bmp"
          show-size
          counter
          label="PNG, JPEG, BMP"
          placeholder="Pick an image"
          prepend-icon="mdi-camera"
          @change="onFilePicked"
        />
      </template>

 <v-btn dark @click="submitForm">
      Save
 </v-btn>

 </v-form>
 </Layout>
 </template>

 <script>
   export default {
   data: () => ({
     imageUpload: null,
   }),
   methods: {
   onFilePicked(file) {
      this.imageUpload = file;
   },
   async submitForm() {
     
console.log('this.imageUpload:', this.imageUpload) // showing file 
//const headersImg = { headers:{ 'Content-Type':'multipart/form-data'}};


const { data } = await axios.post(
  url,
  new FormData(
    `files.${this.imageUpload.name}`,
    this.imageUpload,
    this.imageUpload.name
  )
);
 }

введите здесь описание изображения

на изображении выше явно какие-то данные файла.

если я попытаюсь добавить FormData следующим образом:

async submitForm() {

  const formData = new FormData();

  formData.append(
    `files.${this.imageUpload.name}`,
    this.imageUpload,
    this.imageUpload.name
  );

  //console.log('...formData:', ...formData);
  const urlLocal = 'http://localhost:1337/upload';
  const urlLive = 'http://www.events-pr-server.ml/upload';

  // client in netlefy, server in heroku with: Allow all Origin - for this demo

  try {
    const { data } = await axios({
      method: 'post',
      url: urlLive,
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data',
        // 'Access-Control-Allow-Origin': '*',
      },
    });

результаты как: Файлы пусты

  1. tatusCode: 400, ошибка: «Неверный запрос», сообщение: «Неверный запрос»,…}.
  2. данные: {ошибки: [{id: «Upload.status.empty», сообщение: «Файлы пусты»}]}.

введите здесь описание изображения введите здесь описание изображения


person user769371    schedule 16.04.2021    source источник
comment
Я не вижу определения функции или v-модели, где imageUpload присваивается значение   -  person Nishant Patel    schedule 16.04.2021
comment
Также для ошибки HTMLFormElement это не произойдет, если вы правильно используете компоненты Vuetify   -  person Nishant Patel    schedule 16.04.2021
comment
я обновил сообщение и добавил остальную часть кода.   -  person user769371    schedule 17.04.2021


Ответы (1)


Основываясь на вашем последнем комментарии, я создал кодовую ручку, чтобы проверить проблему.

  1. Нет ошибки HTMLFormElement, с которой я столкнулся, проверьте ниже кодовую ручку https://codepen.io/kurtesy_/pen/MWJBwQX?editors=1111

  2. Рядом с Опубликовать данные формы с использованием axios, используя приведенный ниже протокол, вам нужно указать "Content-Type": "multipart/form-data"

    axios({
       method: "post",
       url: "your_url",
       data: formData,
       headers: { "Content-Type": "multipart/form-data" },
     })
       .then(function (response) {
         //handle success
         console.log(response);
       })
       .catch(function (response) {
         //handle error
         console.log(response);
       });
    
person Nishant Patel    schedule 17.04.2021
comment
спасибо, Нишант Патель, за последний ответ и кодовое письмо, пожалуйста, имейте в виду, что ошибка пустого файла возникла в запросе на публикацию axios — в то время как FormData показывает: данные раньше. Пожалуйста, посмотрите на 3 изображения выше. Я протестировал ваш пример кода и получил [object Error] при отображении на events-pr-server. мл/загрузить URL. (конфигурация сервера: CROS разрешает все источники.) С уважением. - person user769371; 19.04.2021
comment
@ user769371 где вы делаете вызов axios, в какой функции? Вы уверены, что правильно передаете formData в эту функцию? - person Nishant Patel; 20.04.2021
comment
Спасибо, Нишант Патель, за последний ответ, я обновил свой код, чтобы показать вам, откуда я отправляю API - из события отправки щелчка... и я пытался использовать явный синтаксис axois, как и вы, - в моем новом коде выше . но я все еще получил ту же ошибку. http 400, файл пустой. если вы хотите проверить это .. опубликуйте изображение размером менее 20 МБ по указанному выше адресу и поделитесь кодом со мной? будет потрясающе ... из vanilla js это работает как шарм ... но сложно с Vue / Vuetify. С Уважением. - person user769371; 22.04.2021
comment
Еще одна вещь, которую вы можете попробовать, находится в ваших данных формы, не передавайте имя и используйте это formData.append( files.${this.imageUpload.name}, this.imageUpload ); - person Nishant Patel; 22.04.2021