Vue 和 HTML FormData配合axios或ajax上传文件,提交表单数据

简介: Vue 和 HTML FormData配合axios或ajax上传文件,提交表单数据

将本地数据(.xlsx、.docx等文件)上传或导入数据库,有时候需要使用FormData 对象。FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。

一、创建对象:

创建一个FormData对象实例

1、常用的创建

let formData = new FormData();

2、vue中的创建

let formData = new window.FormData();

3、在表单的基础上创建

1.<form id="fromCont" action="" method="post">
    <input type="text" name="content">
    <input type="submit" value="提交">
</form>
//根据id获取表单
  var form = $("#fromCont");
//初始化实例
var formData = new FormData(form);
// 获取content内容
var content= formData.get("content"); 
//通过append() 方法向对象中添加content键值对
formData.append("content",content);

二、操作方法:


formData里面存储的数据形式,一对key/value组成一条数据,key是唯一的,一个key可能对应多个value。如果是使用表单初始化,每一个表单字段对应一条数据,它们的HTML name属性即为key值,它们value属性对应value值。



1、获取值

//通过get(key)/getAll(key)来获取对应的value
formData.get("value");  

2、添加数据

1.//通过append(key, value)来添加数据,如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾
formData.append("key1", "value1");
formData.append("key2", "value2");
formData.append("key2", "value3");
//获取key1
formData.get("key1");  //返回 "value1"
formData.get("key2");  //返回 "value2"
formData.getAll("key2");  //返回 ['value2','value3']

3、设置、修改数据

1.//通过set(key, value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值。
formData.append("key1", "value1");
formData.set("key1", "value2");
//获取key1
formData.get("key1");  //返回 "value2"

4、删除数据

1.//通过delete(key),来删除数据
formData.append("key1", "value1");
formData.delete("k1");
//获取key1
formData.get("key1");  //返回 []

5、判断数据的存在

1.//通过has(key)来判断是否对应的key值,如果有对应的key值就返回true,如果没有则返回false
formData.append("key1", "value1");
formData.has("key1"); // true
formData.has("key2"); // false

三、vue上传文件

1.  <template>
    </div>
      <div class="fileItem">
        //上传文件的input,type设置为file
        <input type="file" ref="fileId" @change="getFile">
      </div>
  </div>
</template>
<script>
export default {
data(){
   return:{
    //赋值input中file内容
    xlsxFile:''
    }
   },
  methods:{
   getFile(){
     //获取file内容
    let files = this.$refs.fileId.files[0];
     this.xlsxFile = files;
   },
    //上传文件
    importRow() {
      let that = this;
      if (that.xlsxFile == "") {
        that.$message.error('请先添加文件');
        return;
      }
    // vue 中使用 window.FormData(),否则会报 'FormData isn't definded'
    //创建一个FormData对象,然后通过append() 方法向对象中添加键值对
      let formData = new window.FormData(); 
      formData.append("file", that.xlsxFile);
     // that.importUrl 上传的接口url
      that.$axios.post(
          that.importUrl,
          formData
        ).then(function(response) {
          that.$message.success('上传成功');
        }) .catch(function(error) {
          that.$message.error(res.data.msg);
        });
}
}
</script>

四、HTML中上传文件

1.//HTML中
<div>
<input name="file" type="file" id="fileCont" value="">
</div>
//JS中,这里引入了Jquery
       $('#fileCont').on('change',function(){
       var fileObj = $(this).files[0]; 
       if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
        //这里是我自己定义的弹框方法
        popup({type:'tip',bg:false,msg:"请选择件",delay:1000,clickDomCancel:true});
        return;
         }
        var formFile = new FormData();
         //加入文件对象,向接口传入两个参数file,id
        formFile.append("file", fileObj); 
        formFile.append("id", id); 
         var data = formFile;
          $.ajax({
            url:urlCur,
            data: data,
             type: "POST",
             dataType: "json",
             //上传文件无需缓存
             cache: false,
             //用于对data参数进行序列化处理 这里必须false
              processData: false,
             //必须
             contentType: false, 
             success: function (res) {
               if(res.code === 200){
              popup({type:'success',bg:false,msg:"上传成功",delay:1000,clickDomCancel:true});
              }else{
              popup({type:'error',bg:false,msg:res.msg,delay:1000,clickDomCancel:true});
                }
             },
         }) 
  })

上传文件需要前后端的小伙伴儿配合,一起完成,第一次进行文件上传时,遇到了一些麻烦,比如前端传值的方法不对、后台接口报500,但是只要有耐心,肯钻研,就一定会成功的!

路漫漫其修远兮,吾将上下而求索。


最后

如果对您有帮助,希望能给个👍评论/收藏/三连!


博主为人老实,无偿解答问题哦❤


原文:https://www.jianshu.com/p/51188659d778


相关文章
|
8月前
|
JavaScript
Vue中Axios网络请求封装-企业最常用封装模式
本教程介绍如何安装并配置 Axios 实例,包含请求与响应拦截器,实现自动携带 Token、错误提示及登录状态管理,适用于 Vue 项目。
312 1
|
12月前
|
JavaScript 前端开发 开发者
Vue 动态添加 HTML 元素组件封装使用方法及长尾关键词优化指南
本文详细介绍了Vue中动态添加HTML元素的使用方法与组件封装技巧。内容涵盖条件渲染(v-if/v-show)、列表渲染(v-for)、动态组件(:is)、手动操作DOM及动态创建组件实例等核心方法。同时,通过动态表单、弹窗组件和动态加载组件的封装示例,展示如何提升代码复用性和可维护性。最后,总结性能优化策略与注意事项,如批量更新DOM、懒加载大型组件及避免直接操作DOM等,帮助开发者在实际项目中灵活应用Vue动态元素管理功能。
333 15
|
12月前
|
JavaScript 前端开发 开发者
Vue 动态添加 HTML 元素组件封装使用方法及长尾关键词优化指南
本文详细介绍了Vue中动态添加HTML元素的多种方法与组件封装技巧,涵盖条件渲染(v-if/v-show)、列表渲染(v-for)、动态组件(:is)、手动DOM操作及动态创建组件实例等内容。同时提供了性能优化建议,如批量更新DOM、使用v-show代替v-if以及懒加载大型组件等。通过合理封装组件,可提高代码复用性和维护性。文中还附有具体示例代码,帮助开发者更好地理解和应用相关技术。适用于前端开发人员学习和实践Vue动态元素处理与组件设计。
273 19
|
12月前
|
缓存 JavaScript 前端开发
Vue 项目中动态添加 HTML 元素的方法与实践
本文探讨了 Vue 中动态添加 HTML 元素的多种技术方案,包括条件渲染(v-if/v-show)、动态组件(component :is)、手动挂载($mount)及 Vuex 状态管理等方法。通过实例分析,如动态表单生成器与全局模态框服务,展示了这些方案在实际开发中的应用。同时提供了性能优化建议和注意事项,帮助开发者根据需求选择最佳方式,在保持 Vue 响应式特性的同时实现灵活交互。附带代码示例,便于理解和实践。
428 2
|
Web App开发 数据采集 前端开发
Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
|
移动开发 HTML5
HTML5 表单属性3
`&lt;input&gt;` 标签的 `formaction`、`formenctype` 和 `formmethod` 属性分别用于指定表单提交的 URL 地址、数据编码类型和提交方法,这些属性可覆盖 `&lt;form&gt;` 标签中的相应属性,并且主要适用于 `type=&quot;submit&quot;` 和 `type=&quot;image&quot;` 的输入类型。
|
移动开发 JavaScript 前端开发
HTML5 表单属性7
`pattern` 属性使用正则表达式验证 `&lt;input&gt;` 元素的值,适用于 `text`, `search`, `url`, `tel`, `email`, 和 `password` 类型。
|
移动开发 UED HTML5
HTML5 表单属性6
`min`、`max` 和 `step` 属性用于限制 `&lt;input&gt;` 标签中的数值或日期范围。例如,可以设置日期选择器的最早和最晚日期,或限制数字输入框的值范围。`multiple` 属性允许在 `&lt;input&gt;` 中选择多个值,适用于邮箱和文件类型。这些属性增强了表单控件的功能性和用户体验。
|
移动开发 HTML5
HTML5 表单属性4
`formnovalidate` 属性是一个布尔属性,用于 `&lt;input&gt;` 元素,指示该输入在表单提交时不需验证,可覆盖 `&lt;form&gt;` 元素的 `novalidate` 属性,常与 `type=&quot;submit&quot;` 一起使用。示例中展示了如何通过两个提交按钮(一个使用验证,另一个不使用)实现不同的表单提交方式。

热门文章

最新文章