Vue自定义输入文件组件无法正确提交

Posted

技术标签:

【中文标题】Vue自定义输入文件组件无法正确提交【英文标题】:Vue Custom input file component could not be submitted correctly 【发布时间】:2018-12-03 22:19:53 【问题描述】:

我有一个用于浏览文件的组件,用于选择要上传的文件。 这是我的组件:

       <template>
        <label class="file-select">
          <div class="select-button">
            <span v-if="value">Selected File: value.name</span>
            <span v-else>Select File</span>
          </div>
          <input type="file" @change="handleFileChange"/>
        </label>
      </template>

      <script>
      export default 
        props: 
          value: File
        ,

        methods: 
          handleFileChange(e) 
            this.$emit('input', e.target.files[0])
          
        
      
      </script>

这是我使用组件的方式:

            <p>Select Image: <bim-fileinput v-model="file"></bim-fileinput></p>

这是我使用 axios 提交文件的方式:

 submit: function()
            console.log(localStorage.getItem('token'));
            axios.post('/api/employees', 
               picture: this.file,   

            ,  headers:  Authorization: 'Bearer '.concat(localStorage.getItem('token')) , 'Content-Type': 'multipart/form-data' )
            .then(response => 
               router.push( name: "IndexEmployees");
            ).catch(error => 
                console.log(error.message);
            );
        

提交后,在控制器中我得到图片属性,但作为一个空数组。 所以我尝试使用控制台打印它。 console.log('文件'+ JSON.stringfy(this.file))

我有文件 作为一个空对象。

所以我需要弄清楚我的代码中的问题在哪里,或者如何正确解决。

提前致谢。

【问题讨论】:

【参考方案1】:

this.file 是File 的实例,json 编码时总是

axios中的问题,必须使用FormData发送文件。

const formData = new FormData();
formData.append('picture', this.file);
axios.post('/api/employees', formData, 
    headers: 
      'Content-Type': 'multipart/form-data',
      // ...
    
) // ...

【讨论】:

以上是关于Vue自定义输入文件组件无法正确提交的主要内容,如果未能解决你的问题,请参考以下文章

Delphi自定义组件如何在属性面板中实现打开文件的对话框?

Vue 2 中的自定义组件

在 vue 中使用自定义 icon 笔记

Vue:从自定义组件派生的自定义组件中的 v-model 和输入事件

如何在php中提交自定义输入文件类型数据?

vue创建自定义组件并监听原生事件