当前位置: 首页 > 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.dtcms.com/a/300620.html

相关文章:

  • Karonte: Detecting Insecure Multi-binary Interactions in Embedded Firmware论文分享
  • LabelMe数据标注软件介绍和下载
  • UNet 改进(38):融合多尺度输入与可变形卷积、门控特征融合的医学图像Unet分割网络
  • Django实时通信实战:WebSocket与ASGI全解析(下)
  • Flutter开发实战之测试驱动开发
  • 金融科技中的跨境支付、Open API、数字产品服务开发、变革管理
  • KNN算法实战:手写数字识别详解
  • 【自动化运维神器Ansible】Ansible常用模块之archive模块详解
  • 2024-2025华为ICT大赛中国区 实践赛网络赛道(高教组)全国总决赛 理论部分真题+解析
  • 零基础,如何入手学习SAP?
  • CentOS网卡未被托管解决记录
  • PiscCode实现从图像到字符艺术
  • Word和WPS文字如何制作分栏试卷?想分几栏分几栏
  • 6.Pinia快速入门
  • [10月考试] A
  • Flutter实现列表功能
  • 进程管理的详细总结
  • Qt GUI缓存实现
  • 实战演练2:实战演练之机器阅读理解(上)
  • AI Coding IDE 介绍:Cursor 的入门指南
  • Cgroup 控制组学习(二)
  • 人工智能与城市:城市生活的集成智能
  • ProtoBuf序列化技术详解与实战指南
  • Model 组件的基本组成
  • vuhub jangow-01-1.0.1靶场攻略
  • 最优估计准则与方法(6)递推最小二乘估计(RLS)_学习笔记
  • 阻止网页重定向
  • 昇思学习营-【模型推理和性能优化】学习心得_20250730
  • 【QT入门到晋级】window opencv安装及引入qtcreator(包含两种qt编译器:MSVC和MinGW)
  • 系统整理Python的循环语句和常用方法