欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue+axios使用FormData方式向后端發(fā)送數(shù)據(jù)

 更新時(shí)間:2023年09月25日 10:17:12   作者:笑的像個(gè)child  
在前后端分離的項(xiàng)目中經(jīng)常使用到Vue+axios通過(guò)FormData的方式向后端發(fā)送表單數(shù)據(jù),下面就來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下

前言

在前后端分離的項(xiàng)目中經(jīng)常使用到Vue+axios通過(guò)FormData的方式向后端(Java)發(fā)送表單數(shù)據(jù)(文字+圖片),但是在初次寫(xiě)這個(gè)功能時(shí),可能會(huì)遇到很多問(wèn)題,本文詳細(xì)的記錄了該功能的實(shí)現(xiàn)。

一、該功能應(yīng)用場(chǎng)景

前端向后端發(fā)送表單數(shù)據(jù)時(shí),可能會(huì)同時(shí)發(fā)送圖片和文本,這時(shí)會(huì)有一些需要注意的小細(xì)節(jié)。

二、代碼示例

1.前端(使用的ant-design-vue,element-ui同理)

代碼如下(示例):

<template>
  <a-form-model :model="form" :label-col="labelCol" :wrapper-col="wrapperCol">
    <a-form-model-item label="標(biāo)題">
      <a-input v-model="form.title"/>
    </a-form-model-item>
    <a-form-model-item label="作者">
      <a-input v-model="form.author"/>
    </a-form-model-item>
    <a-form-model-item label="類(lèi)型">
      <a-radio-group v-model="form.tag">
        <a-radio :style="radioStyle" :value="1">
          生活
        </a-radio>
        <a-radio :style="radioStyle" :value="2">
          學(xué)習(xí)
        </a-radio>
        <a-radio :style="radioStyle" :value="3">
          社會(huì)
        </a-radio>
      </a-radio-group>
    </a-form-model-item>
    <a-form-model-item label="圖片資源">
    //此處開(kāi)啟了多選,并重寫(xiě)了brforeUpload方法,為了關(guān)閉自動(dòng)提交和將圖片轉(zhuǎn)換為base64編碼,同時(shí)聲明了文件列表的類(lèi)型
      <a-upload
          :multiple="true"
          :before-upload="beforeUpload"
          name="file"
          list-type="picture"
      >
        <a-button>
          <a-icon type="upload"/>
          上傳推文圖片
        </a-button>
      </a-upload>
    </a-form-model-item>
    <a-form-model-item label="正文">
      <a-input v-model="form.content" type="textarea"/>
    </a-form-model-item>
    <a-form-model-item :wrapper-col="{ span: 14, offset: 4 }">
      <a-button type="primary" @click="onSubmit">
        提交
      </a-button>
    </a-form-model-item>
  </a-form-model>
</template>
<script>
import axios from "axios";
export default {
  data() {
    return {
      value: 1,
      radioStyle: {
        display: 'inline',
        height: '30px',
        lineHeight: '30px',
      },
      labelCol: {span: 4},
      wrapperCol: {span: 14},
      form: {
        title: '',
        author: '',
        tag: '',
        fileList: [],
        content: ''
      }
    };
  },
  methods: {
    beforeUpload(file, fileList) {
    //將圖片轉(zhuǎn)換為Base64編碼
      const reader = new FileReader()
      reader.readAsDataURL(file)
      reader.onload = () => {
        const base64 = reader.result;
        this.form.fileList.push(base64)
      };
      console.log(this.form.fileList)
       //禁止直接提交圖片
      return false;
    },
    //提交表單
    onSubmit() {
      let formData = new FormData
      //此處需要和后端接收的參數(shù)名相同
      formData.append("form", JSON.stringify(this.form))
      axios.post(
      	  //后端接口,自行修改
          " http://localhost:8081/manage/submit",
          formData,
          {
            headers: {'Content-Type': 'multipart/form-data'}
          }
      ).then(res => {
        console.log(res.data.message)
      })
    },
  },
};
</script>

該段代碼效果圖:

2.后端

代碼如下(示例):

@RestController
@Slf4j
@RequestMapping("/manage")
@CrossOrigin
public class ManageArticleController {
    @Resource
    ArticleService articleService;
    @PostMapping("/submit")
    public SystemResult<String> uploadImages(@RequestParam("form") String form)throws Exception {
    //這兒將傳入的參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的實(shí)體類(lèi)
        ArticleVo articleVo=JSON.parseObject(form,ArticleVo.class);
        return SystemResult.success("上傳成功");
    }
}

實(shí)體類(lèi):

@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
//對(duì)應(yīng)的實(shí)體類(lèi)
public class ArticleVo implements Serializable {
    private String title;
    private String author;
    private int tag;
    private List<String> fileList;
    private String content;
}

三、效果演示

前端向后端發(fā)送數(shù)據(jù),后端打印顯示

實(shí)現(xiàn)效果

在傳入到后端后,可以自行根據(jù)需求將數(shù)據(jù)存入數(shù)據(jù)庫(kù)

四、問(wèn)題總結(jié)

1.前端發(fā)送的字段名和后端實(shí)體類(lèi)的字段名不一致

將前端發(fā)送的數(shù)據(jù)名稱和后端修改一致

2.跨域問(wèn)題

后端接口上添加注解@CrossOrigin

3.文件上傳的限制問(wèn)題

在后端做相應(yīng)的文件上傳配置,比如上傳大小,或者前端也做相應(yīng)的驗(yàn)證。

4.不了解upload組件相關(guān)接口,導(dǎo)致功能無(wú)法實(shí)現(xiàn)

前往官網(wǎng)查看對(duì)應(yīng)組件的api,實(shí)在看不懂的話可以按照我的配置來(lái)寫(xiě)。

到此這篇關(guān)于Vue+axios使用FormData方式向后端發(fā)送數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Vue axios FormData后端發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你使用vue3寫(xiě)Json-Preview的示例代碼

    教你使用vue3寫(xiě)Json-Preview的示例代碼

    這篇文章主要介紹了用vue3寫(xiě)了一個(gè)Json-Preview的相關(guān)知識(shí),引入后直接<json-preview?v-model="jsonData"></json-preview>就可以使用了,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • vue如何添加jest測(cè)試

    vue如何添加jest測(cè)試

    這篇文章主要介紹了vue如何添加jest測(cè)試問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解axios全局路由攔截的設(shè)置方法

    詳解axios全局路由攔截的設(shè)置方法

    這篇文章主要介紹了axios全局路由攔截的設(shè)置方法,axios全局路由代碼通常是在構(gòu)建axios實(shí)例注入的,本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Vue 路由 過(guò)渡動(dòng)效 數(shù)據(jù)獲取方法

    Vue 路由 過(guò)渡動(dòng)效 數(shù)據(jù)獲取方法

    這篇文章主要介紹了Vue 路由 過(guò)渡動(dòng)效 數(shù)據(jù)獲取方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • nuxt框架中路由鑒權(quán)之Koa和Session的用法

    nuxt框架中路由鑒權(quán)之Koa和Session的用法

    后臺(tái)管理頁(yè)面需要有登錄系統(tǒng),所以考慮做一下路由鑒權(quán),這篇文章主要介紹了nuxt框架中路由鑒權(quán)之Koa和Session的用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • vue中使用[provide/inject]實(shí)現(xiàn)頁(yè)面reload的方法

    vue中使用[provide/inject]實(shí)現(xiàn)頁(yè)面reload的方法

    這篇文章主要介紹了在vue中使用[provide/inject]實(shí)現(xiàn)頁(yè)面reload的方法,文中給大家提到了在vue中實(shí)現(xiàn)頁(yè)面刷新不同的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Vue.js學(xué)習(xí)筆記之 helloworld

    Vue.js學(xué)習(xí)筆記之 helloworld

    vue是法語(yǔ)中視圖的意思,Vue.js是一個(gè)輕巧、高性能、可組件化的MVVM庫(kù),同時(shí)擁有非常容易上手的API。有需要的小伙伴可以參考下
    2016-08-08
  • Vue的方法和屬性案例詳解

    Vue的方法和屬性案例詳解

    這篇文章主要介紹了Vue的方法和屬性案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • vue中使用jwt-decode解析token的方法

    vue中使用jwt-decode解析token的方法

    這篇文章主要介紹了vue中使用jwt-decode解析token,文末給大家補(bǔ)充介紹了vue通過(guò)jwt-decode解析token獲取需要的數(shù)據(jù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Vue中子組件的顯示與隱藏方式

    Vue中子組件的顯示與隱藏方式

    這篇文章主要介紹了Vue中子組件的顯示與隱藏方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評(píng)論