记录关于node接收上传文件formData踩的坑

1.vue2使用插件formidable实现接收文件,首先接口不可以使用任何中间件,否则form.parse()方法不执行。

const express = require('express')
const multipart = require('connect-multiparty');
const testController = require('../controller/testController')//用于解析post请求body里的参数
let multipartMiddleware = multipart();const router = express.Router()router.get('/demo', testController.testDemo)
//不可以使用任何中间件,否则form.parser方法将不执行
router.post('/uploadFile', testController.testGetFile)module.exports = router
const testService = require("../service/testService")
const formidable = require('formidable')
const path = require("path")const testController = {testDemo: (req, res, next) => {testService.queryTest(req, res, next)},testGetFile: (req, res, next) => {console.log(req.body);const form = new formidable.IncomingForm()form.uploadDir = path.join(__dirname, "../", "public", "uploads");// 保留上传文件的后缀名字form.keepExtensions = trueform.parse(req, function (err, fields, files) { //使用中间件,方法不执行console.log(files); })res.send('获得文件')},
}module.exports = testController

2.注意版本,vue2 和 vue3 使用的formidable版本不同,一定不可以下载错,否则就会报错。

# v2
npm install formidable@v2# v3
npm install formidable
npm install formidable@v3

3.前端使用formData,一定要保证传给后端的数据为二进制数据,否则传的数据会出现在fields表单的数据里。

尤其要注意formData对象进行append,下面写法有问题,会造成下面的情况,传给后端是非二进制流。这种情况下,文件不会出现在files里,反而会出现在fields里。

async submit() {const file = this.fileList[0]const formData = new FormData()formData.append('file',file) //这里直接传入file会有问题uploadFile(formData,{headers:{'Content-Type': 'multipart/form-data'}}).then(res => {console.log(res);})}

 

 正确写法:

formData.append('file',file.raw)

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

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

相关文章

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能,这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前(约2021年末)貌似可以通过WordPress自带的函数发信,并且收信方提示由xxx代…

可以将linux docker容器中的文件拿出来吗?

当然可以。在Linux环境下,可以从Docker容器中将文件拿出来(即复制到宿主机上),或者将宿主机的文件复制到Docker容器中。以下是两种常用方法: 方法1:使用 docker cp 命令 直接从命令行拷贝文件或目录&…

MySQL数据库安全加固方案

数据库版本:MySQL8.0.22 按照本安全加固方案进行的数据库加固,一般安全扫描工具扫描出来几乎无漏洞。 1.2 帐号安全 1.2.1 避免不同用户间共享帐号 参考以下步骤。 A. 创建用户。 mysql>CREATE USER ‘用户名’@‘用户 host’ IDENTIFIED BY ‘密码’; 执行以上命令可以…

Request Response 基础篇

Request & Response 在之前的博客中,初最初见到Request和Response对象,是在Servlet的Service方法的参数中,之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理,然后通过对Response来进行数…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…

c语言---访问越界之后死循环的原因

目录 死循环的概念环境题目代码运行结果对代码发生情况进行解释对i的地址和arr[12]地址一样的解释注意总结 死循环的概念 简单来说,死循环就是指无法靠自身的控制终止循环,在编程中,则是靠自身控制无法终止的程序。即在某一时刻,…

uniapp基于Android平台的校园生活服务交流论坛系统(二手,失物招领 -跑腿) 小程序hbuiderx

作为一款APP的校园论坛系统,面向的是大多数学者,软件的界面设计简洁清晰,用户可轻松掌握使用技巧。在调查之后,获得用户以下需求: (1)用户注册登录后,可进入系统解锁更多功能&#x…

Python中的Statsmodels库实际案例解析1:市场营销效果分析

在现代商业环境中,了解和评估市场营销活动的效果对于企业来说至关重要。它不仅帮助企业优化广告支出,还能够提高市场策略的整体效率。本文将通过一个实际案例,展示如何使用Python中的Statsmodels库来进行市场营销效果的分析。 写在开头 市场营销效果分析对于评估和优化广告…

【从零开始的rust web开发之路 四】rust语言tokio异步使用redis教程

文章目录 前言一、首先引入依赖二、创建redis客户端三、相关操作设置值mset设置多个key值设置含有过期时间的值如果key不存在才设置获取基本类型值删除一个键删除多个键判断键是否存在 如何使用json序列化导入相关依赖代码相关实例 总结 前言 使用rust写web,自然是…

Windows网络常用的11个命令,ping、tracert、arp、ipconfig、netstat、telnet等

1.ping命令 ping是个使用频率极高的实用程序,主要用于确定网络的连通性。ping能够以毫秒为单位显示延迟。如果应答时间短,表示数据报不必通过太多的路由器或网络,连接速度比较快。ping还能显示TTL(Time To Live&#…

AspNet web api 和mvc 过滤器差异

最近在维护老项目。定义个拦截器记录接口日志。但是发现不生效 最后发现因为继承的 ApiController不是Controller 只能用 System.Web.Http下的拦截器生效。所以现在总结归纳一下 Web Api: System.Web.Http.Filters.ActionFilterAttribute 继承该类 Mvc: System.Web.Mvc.Ac…

客户端和服务端的简介

Client 和 Server 客户端(Client) 或称用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在客户机上,需要与服务端互相配合运行。例如:下载 Q…

ChatGPT炸裂了

优质内容:ChatGPT太炸裂了 hello,我是小索奇 很多人在使用ChatGPT时遇到了两个主要问题,导致他们觉得这个工具并没有带来太多实际价值。首先,许多人发现ChatGPT的回答缺乏深度,缺乏实用性。其次,一些人在使…

MySQL操作问题汇总

MySQL操作问题汇总 无法远程连接Ubuntu的MySQL 无法远程连接Ubuntu的MySQL 提示:MySQL默认只允许本地连接:localhost 解决: #1.修改配置文件 #/etc/mysql/mysql.conf.d/mysqld.cnf > cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/…

WebSocketServer依赖注入问题

WebSocketServer加入spring的bean管理 问题 @Component @ServerEndpoint("/webSocket/{topic}") @Slf4j public class WebSocketServer {@Autowiredprivate WsHandle wsHandle;} 前面使用@ServerEndpoint注册一个websocket服务端,然后发现wsHandle依赖注入失败,…

STM32GPIO输入(按键控制LED、光敏电阻控制蜂鸣器实例)

文章目录 一、介绍传感器模块介绍硬件电路c语言数据类型 二、实例按键控制LED接线图代码实现 光敏电阻控制蜂鸣器组装线路代码实现 相关函数解释 一、介绍 传感器模块介绍 硬件电路 上两种按下时为0,下两种按下时为1。 c语言数据类型 现在常用stdint头文件所定…

BeanDefinitionRegistry学习

Spring版本5.1.x 简介 在Spring框架中,BeanDefinitionRegistry是一个接口,它主要用于向注册表中注册BeanDefinition实例,完成注册的过程。该接口的主要方法是registerBeanDefinition,用于将一个BeanDefinition实例注册到注册表中…

【zip密码】zip压缩包的打开密码忘了,怎么办?

Zip压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了zip压缩包的密…

一张证书如何改变职业生涯?程序员必看!

随着信息产业的迅猛发展,对行业人才的需求也在逐年扩大。据统计,未来五年,我国对信息化人才的总需求量将高达1500万至2000万人。以软件开发为例,我国对软件人才的需求正以每年20%的速度递增,每年新增的需求接近百万。计…

1 初识JVM

JVM(Java Virtual Machine),也就是 “Java虚拟机”。 对于第三点功能:即时编译 常见的JVM 默认安装在JDK中的虚拟机为HotSpot:可以用“java -version”进行查看