FormData( )实现form表单多文件上传(vue)

该博客展示了如何使用Vue.js实现多文件上传功能,并通过axios与后台进行数据交互。HTML代码创建了包含三个文件输入字段的表单,每个字段都有对应的变更事件处理函数。当文件选择改变时,会将文件信息存储在Vue实例的数据属性中。提交按钮点击事件触发一个异步方法,该方法阻止表单默认提交行为,创建FormData对象,将文件数据添加到表单数据中,然后使用axios发送POST请求到指定URL,同时设置Content-Type为multipart/form-data。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 html代码:

 <form method="post" enctype="multipart/form-data" >
     <input type="file" @change="getFile($event)"/>
     <input type="file" @change="getFile1($event)"/>
     <input type="file" @change="getFile2($event)"/>
     <button type="submit" @click="submit($event)">上传</button>
</form>

vue代码:

export default {
    name:'search',
    data() {
        return {
            file:'',
            file1:'',
            file2:'',
        }   
    },
    methods: {
      getFile(event){
        this.file=event.target.files[0];
        console.log(this.file);
      },
      getFile1(event){
        this.file1=event.target.files[0];
        console.log(this.file1);
      },
      getFile2(event){
        this.file2=event.target.files[0];
        console.log(this.file2);
      },
     async  submit(event){
          event.preventDefault();
          let formData=new FormData();
          formData.append('novel',this.file);//设置参数
          formData.append('brief',this.file1);
          formData.append('picture',this.file2);
            await axios({
            method: 'post',
            url: 'xxxxxxxx',//写入地址
            data: formData,
            headers: {
                "Content-Type": "multipart/form-data"
            }
            });
      },
    },
    }}

### Vue3 中实现可选文件上传表单Vue3 的 `form` 表单实现可选的文件上传功能,可以通过定义一个文件上传组件并结合条件渲染来完成。具体来说,在模板部分可以使用 `<input type="file">` 来创建文件输入控件,并通过绑定 v-model 或者监听 change 事件处理文件的选择逻辑。 对于文件上传操作而言,通常会涉及到两个主要方面: - 用户界面交互:显示/隐藏上传区域以及反馈给用户的提示信息。 - 后端通信:实际执行文件传输的动作,并可能需要携带额外参数一同提交。 为了使文件上传成为一种选项而非强制行为,可以在视图层面上提供明确指示说明此步骤是可以跳过的;同时也要确保即使没有选择任何文件也能正常提交整个表单数据而不报错。 下面是一个简单的例子展示如何构建这样一个带有可选文件上传特性的表单[^1]: ```html <template> <div class="upload-form"> <!-- 其他表单项 --> <label for="fileInput">附件 (可选):</label> <input id="fileInput" ref="fileInputRef" @change="handleFileChange" multiple /> <button :disabled="isSubmitting" @click.prevent="submitForm()"> 提交 </button> {{ message }} </div> </template> <script setup lang="ts"> import { ref } from 'vue'; const fileInputRef = ref<HTMLInputElement | null>(null); let selectedFiles: File[] = []; const isSubmitting = ref(false); const message = ref(''); function handleFileChange(event:Event){ const target = event.target as HTMLInputElement; if(target.files?.length){ Array.from(target.files).forEach(file => { console.log('Selected:', file.name); // 打印已选文件名到控制台 selectedFiles.push(file); }); } } async function submitForm(){ try{ isSubmitting.value=true; let formData=new FormData(); selectedFiles.forEach((file)=>{ formData.append('files', file); }); // 假设这里有一个API用于接收POST请求发送的数据包 await fetch('/api/upload',{ method:'POST', body:formData, }); message.value='成功!'; }catch(error){ message.value=`失败:${error}`; }finally{ isSubmitting.value=false; } } </script> ``` 在这个实例里,当用户选择了多个文件时,这些文件会被存储在一个名为 `selectedFiles` 的列表变量之中。而一旦触发了表单提交动作,则会将所有选定好的文件打包成 `FormData` 对象并通过 Fetch API 发送到服务器端去。值得注意的是,即便没有任何文件被挑选出来也不会阻止表单的整体递交过程继续下去[^2]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值