当前位置: 首页 > news >正文

携带参数的表单文件上传 axios, SpringBoot

 页面上的表单如上图, 点击确定按钮需要把参数统一传给后端.

前端代码:

表单的提交方法

const submit = async () => {const formData = new FormData();formData.append("bookName", bookForm.value.bookName);formData.append("author", bookForm.value.author);formData.append("file", bookForm.value.file);const res = await uploadFile("/book/saveBook", formData);
}

封装的 uploadFile方法

export function uploadFile(url, formData) {return new Promise((resolve, reject) => {axios.post(url, formData, {headers: {'Content-Type': 'multipart/form-data'}}).then(response => {resolve(response)}).catch(error => {console.log("上传失败", error);})});
}

后端接口:

    @PostMapping("/saveBook")public ResponseResult<?> saveBook(@ModelAttribute BookBean book) {System.out.println(book.getBookName() + "---" + book.getAuthor());System.out.println(book.getFile());MultipartFile file = book.getFile();long size = file.getSize();System.out.println(size);FileStoreInfo fileStoreInfo = fileManageService.uploadFile(file);System.out.println(fileStoreInfo);return success(null);}@Datapublic class BookBean {private String bookName;private String author;private MultipartFile file;}

===================================

页面完整代码

<template><div class="wrap"><div class="btn-box"><el-button type="primary" @click="uploadFileClick">上传文件</el-button></div><el-table :data="tableData" style="width: 100%"><el-table-column prop="id" label="ID"/><el-table-column prop="bookName" label="图书名称"/><el-table-column prop="author" label="作者"/><el-table-column prop="coverPicture" label="封面"/><el-table-column prop="" label="操作"/></el-table><el-dialogv-model="dialogVisible"title="新增图书信息"width="800"><el-form label-width="120px"><el-row><el-col :span="20"><el-form-item label="图书名称"><el-input v-model="bookForm.bookName"/></el-form-item></el-col></el-row><el-row><el-col :span="20"><el-form-item label="作者"><el-input v-model="bookForm.author"/></el-form-item></el-col></el-row><el-row><el-col :span="20"><el-form-item label="封面图片"><el-uploadref="uploadRef":on-change="handleChange"class="upload-demo":auto-upload="false"><template #trigger><el-button type="primary" size="small">选择文件</el-button></template></el-upload></el-form-item></el-col></el-row></el-form><template #footer><div class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="submit">确定</el-button></div></template></el-dialog></div>
</template><script setup>
import {ref} from "vue";
import {uploadFile} from "../network/http.js";let tableData = ref([]);
let dialogVisible = ref(false);
let bookForm = ref({bookName: "",author: "",file: "",
})const handleChange = (file) => {bookForm.value.file = file.raw;
}const uploadFileClick = () => {dialogVisible.value = true;
}const submit = async () => {const formData = new FormData();formData.append("bookName", bookForm.value.bookName);formData.append("author", bookForm.value.author);formData.append("file", bookForm.value.file);const res = await uploadFile("/book/saveBook", formData);
}</script>

http://www.lryc.cn/news/601381.html

相关文章:

  • 深度解读Go 变量指针
  • [每周一更]-(第152期):Go中的CAS(Compare-And-Swap)锁原理详解
  • iOS安全和逆向系列教程 第20篇:Objective-C运行时机制深度解析与Hook技术
  • 结合Golang语言说明对多线程编程以及 select/epoll等网络模型的使用
  • goland编写go语言导入自定义包出现: package xxx is not in GOROOT (/xxx/xxx) 的解决方案
  • 学习Python中Selenium模块的基本用法(1:简介)
  • Day06–哈希表–242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
  • 仓库管理系统-2-后端之基于继承基类的方式实现增删改查
  • 7.25 C/C++蓝桥杯 |排序算法【下】
  • macOS 安装 Homebrew
  • JavaScript事件(event)对象方法与属性
  • mac配置多版本jdk
  • C#中Visual Studio平台按照OfficeOpenXml步骤
  • Min-Max标准化​ 和 ​Z-score标准化
  • Python队列算法:从基础到高并发系统的核心引擎
  • LeetCode|Day27|70. 爬楼梯|Python刷题笔记
  • Spring Retry 异常重试机制:从入门到生产实践
  • Spring Boot自动配置原理深度解析
  • 适配IE11(通过Babel+core-js转译ES6语法)
  • Flutter 生命周期介绍
  • 几个注册中心的特性
  • 欧拉图与欧拉回路
  • 菜鸟的C#学习(四)
  • windows 10安装oracle(win64_11gR2)
  • 医疗AI语义潜空间分析研究:进展与应用
  • Unity 实时 CPU 使用率监控
  • IP--MGER综合实验报告
  • Linux驱动20 --- FFMPEG视频API
  • 回归预测 | MATLAB实现BiTCN双向时间卷积神经网络多输入单输出回归预测
  • AWS免费套餐全面升级:企业降本增效与技术创新解决方案