Node利用connect中间件 及bodyParser处理文件上传

2023-11-14

1.html

<input type="file" name="hello" multiple="multiple"/>
<button>Send files!</button> 


input type = “file”的作用就是可以选择指定一个文件,enctype是指明提提交表单的格式,选择文件后点击Button,提交表单。multiple属性的意思是可以选择多个文件,如

果去掉就只能单选。另外属性名name=’hello’是不能去掉的,req.files得不到任何数据。页面如下:
这里写图片描述
\
图1
2.服务器代码

var connect = require(‘connect’);

var server = connect()
.use(connect.static(‘public’))
.use(connect.bodyParser())
.use(connect.logger())
.use(function(req,res,next){
if(‘POST’== req.method){
console.log(‘———-body————’);
console.log(req.body);
console.log(“———-files———–”);
console.log(req.files);
}else{
next();
}
});
server.listen(3000);

在工程目录中新建public,作为存放index.html的目录,bodyParser中间件看似没有发挥作用,但是如果去掉bodyParser,req.body和req.files,都将是undefined。运行结

果如下:
这里写图片描述
\
图2

我们发现虽然我们没有给bodyParser指定上传文件存放的路径,但是它自己还是会找个地方存放,应该是个默认地址C盘某处。如上图中”path:“后所指的位置,而且也确实保存了这个文件,并且无扩展名。

在html中指定的name,就是图2中req.files中的file属性,也就是所这两个是同名的,如果name= ‘abc’,这个属性就会是’abc‘

2.指定路径并返回给浏览器数据

如果我们用浏览器访问127.0.0.1:3000,然后选择一个本地文件,提交表单。我们会发现图1所示的页面会在一段时间后会显示没有收到数据,这是因为,我们没有对前端

进行回应的原因,通俗的将,没有在res中写入任何数据,并调用end();优化后的代码如下:

var connect = require(‘connect’);
var fs = require(‘fs’);

var server = connect()
.use(connect.static(__dirname+’/public’))
.use(connect.bodyParser({uploadDir:__dirname +’/file’,keepExtensions:true}))
.use(connect.logger())
.use(function(req,res,next){
if(‘POST’== req.method && req.files)
{
console.log(‘———-body————’);
console.log(req.body);
console.log(“———-files———–”);
console.log(req.files);
console.log(“——–read file————”);
fs.readFile(req.files.hello.path,’utf8’,function(err,data){
if(err){
res.writeHead(500);
res.end(‘Error!’);
return;
}
res.writeHead(200,{‘Content-Type’:’text/html’});
res.end([

File: ’ + req.files.hello.name + ‘


,’
Type: ’ + req.files.hello.type + ‘

,’
Contents:
’ + data + ‘

].join(”));
});
}else{
next();
}
});

server.listen(3000);
执行这段代码最好将inde.html中的input 中的 multiple属性去掉,因为该代码不具备处理多个文档的能力。代码中我们将上传文件的类型和内容返回给前端,这种就不会有
浏览器显示没有收到数据了。注意代码中我们直接应用req.files.hello,我们知道了属性名是,才可以这么写。当然,其实req.files在此情况下也就一个属

性,叫所hello,可以通过 key in req.files的方式判断取出。

最后指出《了不起的Node.js》此段内容有误,req.body.file是不存在的,body中的内容应该是input框中输入的实际内容

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node利用connect中间件 及bodyParser处理文件上传 的相关文章

  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • npmjs.org - 找不到自述文件

    我是 npm 包的主要作者scramjet 一个月以来 我遇到了关于可视性的问题README md在 npmjs 中 The npm 中的超燃冲压发动机包 https www npmjs com package scramjet shows
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • 节点无法抓取某些页面

    我不知道这是否与冷融合页面有关 但我无法刮掉这些 cfm pages 在目录中的命令行中request run node gt var request require request node gt var url http linguis
  • Should js 无法读取 null 的属性“should”

    我尝试在node中使用测试工具mocha 考虑以下测试场景 var requirejs require requirejs requirejs config Pass the top level main js index js requi
  • 在回调中使用await(Microsoft Bot Framework v4 Nodejs)

    我正在尝试将回复发送回chatbot emulator从内部回调 async getUserDetails step console log inside get userdetaiuls modeiule this userDBObjec
  • 如何使用对象数组创建猫鼬模式

    我有这个 json data id 1 name Sample test description this is a sample test category tests points 100 startDate 2018 02 15 00
  • 在 MongoDB 上,当我的回调位于“find”内部时,如何限制查询?

    我在 MongoDB 中有这个查询 db privateMessages find or fromId userId toId socket userId fromId socket userId toId userId function
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 具有 Firebase (FCM) 推送通知的 Node js

    我正在使用 Node js 开发 REST api 并且有一个休息端点来发送 firebase 推送通知 我的代码如下 const bodyParser require body parser var cors require cors v
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • 如何使用 Passport 验证 Supertest 请求?

    我使用 Passport js 进行身份验证 本地策略 并使用 Mocha 和 Supertest 进行测试 如何使用 Supertest 创建会话并发出经过身份验证的请求 正如 zeMirco 指出的那样 底层superagent模块支持
  • JavaScript 中的“REPL”是什么? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我看到了创建 REPL 的参考 什么
  • 猫鼬不创建索引

    我最近开始使用 Mongoose v 3 2 1 但我遇到了索引问题 我在我的模式 Schema path attr index true 上定义了几个索引 但它们不是在数据库中创建的 我在 shell 中运行 db collection
  • 打字稿:“找不到模块”且输入有效

    我刚刚使用 typescript 启动了一个新的 Nodejs 项目 我安装了打字 https github com typings typings https github com typings typings 并使用它来安装 Node
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • Node.js 可读流_read用法

    我了解如何在 Node 的 new 中使用可写流Streams2库 但我不明白如何使用可读流 举个例子 一个流包装器围绕dgram module var dgram require dgram var thumbs twiddle func

随机推荐

  • PS解决“无法使用快速选择,因为没有足够内存(RAM)”

    PS解决 无法使用快速选择 因为没有足够内存 RAM win R打开命令行 在输入框输入 regedit 点击确定 找到目录HKEY CURRENT USER Software Adobe Photoshop 点击对应版本Photoshop
  • 万维网服务器协议提供web,万维网的HTTP和FTP协议.doc

    万维网的HTTP和FTP协议 doc 万维网的HTTP和FTP协议 摘 要 20世纪40年代以来 人们就梦想能拥有一个世界性的信息库 在这个信息库中 信息不仅能被全球的人们存取 而且能轻松地链接到其他地方的信息 使用户可以方便快捷地获得重要
  • PyQt5 自动计算阵列矩阵

    说实话 其实我当时听懂了 真正写代码的时候越写越懵逼 所以还是记录下来吧 另外有兴趣了解的同学还是看老师的视频解说比较好 想学PyQT的同学强烈建议看这个老师的视频 由浅入深 从PyQT最基本的开始教学 非常棒 bilibili https
  • 第五章:平衡二叉树

    系列文章目录 文章目录 系列文章目录 前言 1 平衡二叉树的介绍 1 1 AVL树的概念 1 2 AVL树的性质 2 平衡二叉树的插入 2 1 平衡二叉树的插入步骤 2 2 平衡二叉树的旋转 2 2 1 左单旋 2 2 2 右单旋 2 2
  • /etc/vsftpd.conf详解

    匿名权限控制 anonymous enable YES 是否启用匿名用户no anon password YES 匿名用户login时不询问口令下面这四个主要语句控制这文件和文件夹的上传 下载 创建 删除和重命名 anon upload e
  • 4399笔试题

    1 冒泡排序的时间复杂度 2 有无序数字5000个 用什么算法能快速的找出最大的前50个数字 3 比如有10个台阶 一直青蛙一次只能跳一个或者二个台阶 问青蛙从第一个台阶开始跳最多有几种跳法 4 从区间 2 2 中随意取出二个实数 它们的和
  • 解析顶点着色器和片元着色器

    管线 也称渲染管线 因为 OpenGL ES在渲染处理过程中会顺序执行一系列操作 这一系列相关的处理阶段就被称为OpenGL ES 渲染管线 OpenGL ES 渲染过程就如流水线作业一样 这样的实现极大地提高了渲染的效率 如图就是 Ope
  • C/C++遍历文件夹下所有文件或文件夹名称(使用Windows API)

    目录 前言 实现思路 源代码 前言 在项目开发中 经常需要去遍历某一个文件夹下的一些资源文件 为了避免重复造轮子 刚好在此记录一下 实现思路 1 给出一个文件夹名称 2 获取文件句柄 3 过滤掉 和 上一级和当前目录 4 通过获取 find
  • (一)抖音快手短视频去水印原理分析

    抖音 一 首先获取分享短链接 一 我打12360他竟告诉我不可以订票 洛阳综合保税区 海关 https v douyin com JrA4H4N 复制此链接 打开 抖音短视频 直接观看视频 短链接 https v douyin com Jr
  • nginx负载均衡

    目录 负载均衡 nginx的七层代理和四层代理 七层代理的就是http请求和响应 四层代理与七层代理之间的区别 正向代理与反向代理 负载均衡 upstream 算法 算法总结 stream 负载均衡 通过反向代理来实现 nginx的七层代理
  • 修改 Ztree 节点的图标 ( icon 与 iconSkin)

    1 使用 icon 首先 进入 Ztree 官网 查看 Api http www treejs cn v3 api php 你可以下载官网上的ztree压缩包 在里面有 自定义图标的实例代码 或进入这个地址下载 https download
  • Vue2项目练手——通用后台管理项目第八节

    Vue2项目练手 通用后台管理项目 菜单权限功能 tab js Login vue CommonAside vue router index js 权限管理问题解决 router tab js CommonHeader vue main j
  • QT获取电脑系统,主板型号,CPU型号,硬盘型号,内存大小等相关信息(一)通过CMD和WMIC命令行的方式

    QT通过CMD和WMIC命令行的方式获取电脑系统 主板型号 CPU型号 硬盘型号等相关信息 包括使用diskpart wmic DIrectX等 目录导读 一 DIrectX诊断工具 打开窗体查看 命令行输出 二 直接CMD输入SYSTEM
  • 【笔记】Oracle表中身份证、手机、邮箱脱敏SQL

    前天开始居家办公 用向日葵远程办公室电脑 但是昨天办公室的网崩了 导致无法远程 于是开始用腾讯云做数据库 为防止数据泄露就有了下边的关键数据脱敏操作 笔记如下 select from job xs where xh U201311735 R
  • 转:linux下配置JDK提示tools.jar/dt.jar权限不够

    原文 http lkf009 iteye com blog 1327912 提示权限不够的原因 CLASSPATH JAVA HOME lib tools jar JAVA HOME lib dt jar这样写是不对滴 要这样写 CLASS
  • Python字典用法

    get 函数返回指定键的值 如果值不在字典中返回默认值 gt gt gt a a 1 b 2 gt gt gt a get a 0 1 gt gt gt a get a 1 gt gt gt a get c 3 3 gt gt gt a g
  • 【超详细】POST注入(Less-11)、Cookie注入(Less-20)、二次注入(Less-24)、宽字节注入(Less-32)

    本博文仅用于信息安全防御教学 请遵守中华人民共和国网络安全法 目录 本博文仅用于信息安全防御教学 请遵守中华人民共和国网络安全法 POST注入 Cookie注入 二次注入 宽字节注入 POST注入 需要知道的一些知识 所谓POST注入指的是
  • 1、输入四个整数,按照从小到大顺序输出。(20分)

    题目 1 输入四个整数 按照从小到大顺序输出 20分 代码 注 题目说的是四个数的排序 我就直接写了个冒泡排序 public class One207 public static void main String args System o
  • Dilated Conv and Deformable Conv. 空洞卷积和可变形卷积

    空洞卷积论文地址 https arxiv org pdf 1511 07122 pdf 可变形卷积论文地址 https arxiv org pdf 1703 06211 pdf 之前一直知道这两个方法 一直没时间看论文和实现 后面碰到越来越
  • Node利用connect中间件 及bodyParser处理文件上传

    1 html