前端如何上传图片给后台?如何传递 multipart/form-data 类型的数据?图片大小、格式检查?

1. 如何上传图片?

图片上传需要传二进制流,请求头的 content-type 类型需为 multipart/form-data,传递的格式如下图所示

image.png

前后端交互通常为:

  1. 先调用接口上传二进制流图片
  2. 然后再上传表单其他内容(第一步通常会返回后台存储的图片id,第二步会将图片id传递给后台)

注:目前我只用过以上这种方法,我能想到的另一种方法是表单及其图片都用 multipart/form-data 格式传递过去,但我和后台目前没用过这种方法

2. 如何传递 multipart/form-data 类型的数据?

  1. 显式的设置 content-type:multipart/form-data;(没直接用这个是由于工作的项目封装了 http 方法,不支持我直接设置)
  2. new formData(),使用 for 遍历对象,调用 formDataObj.append() 方法添加键值对;(此处可在 http 公共函数直接新增一个这样的方法,避免每次都需要写)
var formData = new FormData()for (var key in data) {formData.append(key, data[key])}
return formData
  1. axios 自带 transformRequest 方法,在发送请求前对 data 做预处理,transformRequest接受一个数组,第二个函数将处理上一个函数的结果。类似的函数还有 transformResponse 。
axios.create({transformRequest: [function (data, headers) {if (data instanceof Object) {const formData = new FormData();for (const key in data) {formData.append(key, data[key]);}return formData;}return data;}],
});

3. 图片大小、格式检查

onUploadChange(file){const isLt20M = file.size / 1024 / 1024 < 20const extension = file.name.split('.').pop().toLowerCase()if (!isLt20M) {this.$newMessage.error('图片大小不能超过20MB')return}if (!(['jpg', 'jpeg', 'png', 'gif', 'bmp'].includes(extension))) {this.$newMessage.error('只接受图片类型的文件')return false}const imageSrc = URL.createObjectURL(file.raw)this.dataForm.popPic = file.raw
}

如有错误,麻烦订正🌹

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

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

相关文章

从 HPC 到 AI:探索文件系统的发展及性能评估

随着 AI 技术的迅速发展&#xff0c;模型规模和复杂度以及待处理数据量都在急剧上升&#xff0c;这些趋势使得高性能计算&#xff08;HPC&#xff09;变得越来越必要。HPC 通过集成强大的计算资源&#xff0c;比如 GPU 和 CPU 集群&#xff0c;提供了处理和分析大规模数据所需的…

Canvas笔记04:绘制九大基本图形的方法,重头戏是贝塞尔曲线

hello&#xff0c;我是贝格前端工场&#xff0c;最近在学习canvas&#xff0c;分享一些canvas的一些知识点笔记&#xff0c;本期分享canvas绘制图形的知识&#xff0c;欢迎老铁们一同学习&#xff0c;欢迎关注&#xff0c;如有前端项目可以私信贝格。 Canvas是HTML5中的一个绘…

1分钟帮你快速搞定遥测终端机RTU选型!

遥测终端机RTU-MGTR-W系列 精准应对贴心服务每一个关键场景 MGTR-W系列遥测终端机在水利水务领域有着广泛的应用&#xff0c;能够满足各种细分场景的需求。该系列终端机助力实现灌区信息化、高标准农田建设、农村供水信息化、水库雨水情监测、大坝安全监测、地下水监测以及水…

使用Python来发送电子邮件(手把手教学)

一、首先得准备两个邮箱 1、接收邮箱地址随意&#xff08;可以再添加一个QQ邮箱做接收用&#xff09;&#xff0c; 2、重点是发送邮箱&#xff0c;发送邮箱这里使用的是QQ邮箱&#xff1a; ① 打开一个web&#xff0c;登录QQ邮箱&#xff1a; 右上角&#xff1a; ②安全设置-…

如何恢复edge的自动翻译功能

介绍&#xff1a;对于英文不好的小伙伴&#xff0c;把英语翻译成中文是有帮助的&#xff0c;而edge可以直接对英文页面翻译这一功能更是受人喜爱&#xff0c;但是&#xff0c;最近发现这一项功能消失了。 原始界面&#xff1a; 下面展示如何恢复该功能。 1.打开edge&#xff…

JavaScript实现遍历精灵图的效果

问题描述&#xff1a;通过JavaScript将精灵图里面的小图标给遍历出来。 关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

安全测试:抵御现代网络威胁的盾牌!

什么是安全测试 安全测试是软件测试的一个重要方面&#xff0c;专注于识别和解决软件应用程序中的安全漏洞。它旨在确保软件免受恶意攻击&#xff0c;未经授权的访问和数据泄露。 安全测试的目的 安全测试涉及核实软件是否符合安全标准&#xff0c;评估安全功能和机制&#…

【b站咸虾米】ES6 Promise的用法,ES7 async/await异步处理同步化,异步处理进化史

课程地址&#xff1a;【ES6 Promise的用法&#xff0c;ES7 async/await异步处理同步化&#xff0c;异步处理进化史】 https://www.bilibili.com/video/BV1XW4y1v7Md/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 图文地址&#xff1a;https://www.b…

Selenium自动化测试-3.元素定位(2)

我们发现网站并没有id、name等属性。那么&#xff0c;我们可以用更高级的定位方法——xpath来定位元素。 什么是xpath? xpath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现&#xff0c;所以selenium用户可以使用这种强大语言在web应用中定位元素&#xf…

基于单片机的智能空调设计

目 录 摘 要 I Abstract II 引 言 1 1 系统整体设计 3 1.1 系统方案设计 3 1.2 系统工作原理 3 2 硬件设计 5 2.1 电源模块设计 5 2.1.1 电源模块选择 5 2.1.2 电源模块电路设计 5 2.2 单片机模块设计 5 2.2.1 单片机型号选择 5 2.2.2 单片机模块电路设计 6 2.3 按键模块设计 …

高质量的外贸开发信标题都是怎样的?

今天在网上看到很多不错的开发信标题&#xff0c;觉得不错&#xff0c;收藏起来分享给大家学习。 标题是吸引读者打开邮件的第一印象&#xff0c;对于外贸销售人员来说&#xff0c;精心撰写开发信标题至关重要。客户收到的邮件那么多&#xff0c;那么在客户收件箱中的5至20个客…

每日一题——LeetCode1592.重新排列单词间的空格

方法一 个人方法 模拟&#xff1a; 把text字符串用空格符分隔成数组&#xff0c;数组长度-1就是原字符串中空格的数量&#xff0c;将数组中的单词都提取到words数组中&#xff0c;有了空格数量和单词数量就能计算出相邻单词间需要的空格数量&#xff0c;维护一个空字符串str&a…