SpringBoo和vue项目blob传参未生效

学无止境,气有浩然

文章目录

  • 前言
  • 展示问题代码
  • 问题
  • 解决
  • 打完收工!


前言

工作里做的一个小工具,axios传参,使用FormData传参到后端,没有办法映射除字段值,但是从控制台看,传的字段值都是正确的,当然开始是因为简单没有将axios抽调公共组件,由于抽调出来之后开始报这个错误,那么很明显就是这个问题导致了。


展示问题代码

  • 请求部分
handleFileUpload(file) {const formData = new FormData()if (file) {formData.append('file', file.file)}formData.append('name', this.form.name)formData.append('num', this.form.num)formData.append('env', this.form.env)formData.append('nameGenMethod', this.form.nameGenMethod)request.post('/home/test', formData, {responseType: 'blob',headers: {'Content-Type': 'multipart/form-data'}}).then(response => {this.filedownload(response)this.$message({message: 'handle success',type: 'success'})}).catch(error => {const decoder = new TextDecoder('utf-8');this.$message({message: decoder.decode(error.response.data),type: 'error'})})},filedownload (res) {const filename = res.headers['content-disposition']// const blob = new Blob([ iconv.decode(res.data, 'GBK')])const blob = new Blob([ res.data])var downloadElement = document.createElement('a')var href = window.URL.createObjectURL(blob)downloadElement.href = hreflet finalfilename = filename.split('filename=')[1]if (finalfilename.startsWith('"')) {finalfilename = finalfilename.substring(1)}if (finalfilename.endsWith('"')) {finalfilename = finalfilename.substring(0, finalfilename.length - 1)}downloadElement.download = decodeURIComponent(finalfilename)document.body.appendChild(downloadElement)downloadElement.click()document.body.removeChild(downloadElement)window.URL.revokeObjectURL(href)}}
  • 公共部分
import axios from 'axios'
import { Notification } from 'element-ui'// 创建axios实例
const service = axios.create({baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_urltimeout: 3000000 // 请求超时时间
})function getToken () {let accessToken = sessionStorage.getItem("access_token")if (accessToken) {return 'Bearer ' + accessToken}return false
}
// request拦截器
service.interceptors.request.use(config => {if (getToken()) {config.headers.Authorization = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改}config.headers['Content-Type'] = 'application/json'return config},error => {Promise.reject(error)}
)// response 拦截器
service.interceptors.response.use(response => {if (response.data instanceof Blob) {return response}return response.data},error => {if (error.toString().indexOf('Error: timeout') !== -1) {Notification.error({title: '网络请求超时',duration: 300000})return Promise.reject(error)}// 兼容blob下载出错json提示if (error.response.data instanceof Blob) {error.response.data.text().then(res => {Notification.error({title: res,duration: 3000})})} else {let code = 0try {code = error.response.status} catch (e) {if (error.toString().indexOf('Error: timeout') !== -1) {Notification.error({title: '网络请求超时',duration: 3000})return Promise.reject(error)}}if (code) {if (code === 401) {Notification.warning({title: '未认证',duration: 3000})sessionStorage.removeItem("access_token")} else if (code === 403) {Notification.warning({title: '未认证',duration: 3000})sessionStorage.removeItem("access_token")} else if (code === 500) {const errorMsg = error.response.dataif (errorMsg !== undefined) {Notification.error({title: errorMsg,duration: 3000})} else {Notification.error({title: '未知错误',duration: 3000})}} else {const errorMsg = error.response.data.messageif (errorMsg !== undefined) {Notification.error({title: errorMsg,duration: 5000})} else {Notification.error({title: '未知错误',duration: 3000})}}} else {Notification.error({title: '远程服务器断开连接',duration: 3000})}}return Promise.reject(error)}
)
export default service

因为项目可能会传文件,虽然不是必选项,但是可以通用,所以axios传输的时候可以使用multipart/form-data的请求头。


问题

在抽取公共请求代码的时候,重新设置了请求头为application/json,就导致使用js提供的FormData无法解析成为json,导致接收不到请求。


解决

就是判断一下请求里面是否设置了请求头就好了。

if (!config.headers['Content-Type']) {config.headers['Content-Type'] = 'application/json'
}

打完收工!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Milvus向量数据库检索

官方文档:https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离,并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

Javaweb-MyBatis

一、概念 MyBatis是一款优秀的持久层框架,用于简化JDBC开发 MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software found迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github 持久层 负责将数据到保存到数…

科技云报道:两会热议的数据要素,如何拥抱新技术?

科技云报道原创。 今年全国两会上,“数字经济”再次成为的热点话题。 2024年政府工作报告提到:要健全数据基础制度,大力推动数据开发开放和流通使用;适度超前建设数字基础设施,加快形成全国一体化算力体系&#xff1…

低代码与数字化工具:重塑软件开发的新范式

随着信息技术的飞速发展,软件开发已成为推动数字化转型的核心力量。在这个变革的时代,低代码与数字化工具逐渐崭露头角,它们不仅简化了开发过程,还大大提高了开发效率,成为推动软件开发领域变革的重要力量。 低代码&am…

面试经典-11-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,…

2024自动化测试的痛点与发展趋势!

前几天在技术交流群里,大家讨论了很多关于自动化测试落地面临的痛点和如何创造价值的话题,颇有感触。 自动化测试这个话题,从出现到在国内大规模开展实践,有很长的一段时间了。早期,大家对自动化测试的理解和使用目的…

java:学生管理系统

一、介绍 该功能是实现学生信息的添加,查看,修改,删除以及退出系统的简单操作。 二、代码实现 public class Student {private String sid;//学号private String name;//姓名private String age;//年龄private String address;//地址publi…

通过NFS 实现windows共享linux目录

一、配置WIndows 1.进入程序和功能 2.勾选NFS服务,安装客户端 二、安装NFS Service 在ubuntu 1.查看apt源是否存在nfs服务端安装包 sudo apt-cache madison nfs-kernel-server 2. 安装nfs-kernel-server sudo apt install nfs-kernel-server 3.建立共享目录&…

Compose UI 之 BottomAppBar 底部应用栏

BottomAppBar 底部应用栏 BottomAppBar 是一个在 Jetpack Compose 中用于创建底部应用栏的组件。它提供了一个高度可定制且功能丰富的底部导航解决方案。 它的使用方式与 TopAppBar 类似。下面的图是 BottomAppBar 的基本样式图。 常见使用场景 BottomAppBar 在应用中常用于…

代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 题目链接 235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 思路 因为二叉搜索树是有序的,那么就可以向二分法一样去有向的搜索。 //---------------------------递归法---------------------------// cl…

人工智能课题、模型源码

人工智能研究生毕业~深度学习、计算机视觉、时间序列预测(LSTM、GRU、informer系列)、python、人工智能项目代做和指导,各种opencv图像处理、图像分类模型(vgg、resnet、mobilenet、efficientnet等)、人脸检…

ESD静电测试闸机-筑成电子厂防静电管理的第一道防线

ESD静电测试闸机是一种用于防止静电对电子产品和设备造成损害的重要设备。在电子厂等对静电敏感的场所,ESD静电测试闸机扮演着防静电管理的第一道防线的角色,确保生产环境的安全和产品质量的稳定。本文将从静电监测和消除、刷卡/身份证认证、指纹/人脸识…

Tengine编译安装

首先下载源码 可以去官网:The Tengine Web Server 当前最新版地址:https://tengine.taobao.org/download/tengine-3.1.0.tar.gz 安装编译依赖 yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel \libxslt-devel gd-devel GeoIP…

Java的锁机制,线程池机制在项目中应用

Java的锁机制是Java多线程编程中用于保护共享资源的一种机制。Java提供了多种类型的锁,包括synchronized关键字和Lock接口。 synchronized关键字:synchronized关键字可以用于方法或代码块级别的同步。当一个线程进入synchronized块时,它将获得…

一款前端开发工具Hbuilder

背景:最近日在接触前同事留下的一个VUE项目(只有前端代码,后台服务压根没写真不知道以前是怎么糊弄过去的)时,发现一款可以快速开发前端的软件;今日分享一下。 当我打开项目时发现,有个app.vue…

【Cookie和Session辨析】

1.cookie 1.1什么是cookie Cookie 是一种在客户端(通常是 Web 浏览器)和服务器之间传递信息的机制,用于在客户端存储少量的数据。它由服务器发送到客户端浏览器,然后浏览器会将这些数据存储在本地,并在后续的请求中将…

WPF 触发器

触发器 WPF的 Trigger 是一种用于定义和管理 XAML 资源的触发器,它可以根据不同的条件或事件来改变控件的属性或行为。 以下是触发器的类型 基本触发器(Trigger): 这种触发器是根据控件自身的依赖属性的值来触发的,例如,当鼠标移动到按钮上…

什么是API签名认证?

什么是API签名认证 一种用于验证API请求合法性的安全机制,它通过使用密钥和算法为每个请求生成一个唯一的签名值来确保数据的安全传输和访问控制。 以下是API签名认证的一些关键点: AppKey分配:为客户端或用户分配一个独特的AppKey&#x…

解决安装PyMuPDF(也被称为fitz库)的问题(可成功安装且使用)

解决安装PyMuPDF(也被称为fitz库)的问题(可成功安装且使用) 安装方法:一些安装时报错的原因解析:报错1:报错2:报错3-无效的分发包警告:报错4: 使用实例 在使用…

SpringBoot异常:Unsatisfied dependency expressed through field ‘mapper‘解决办法

在创建SpringBoot项目时,项目页面报错,显示Bean错误时,原因是底层原因无法找到Mapper文件的依赖关系,导致Spring无法自动装配 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean …