Nodejs 文件上传

node js 接收表单数据原理

/*** node js 接收表单数据*/
const http = require("http");
const qs   = require("querystring");http.createServer((request, response) => {// 表单提交的原理if (request.url === "/post" && request.method.toLowerCase() === "post") {// 1. 设置接收的变量let formData = "";// 2. 接收小段数据request.on("data", buf => {formData += buf;});// 3. 监听所有数据传递完毕事件request.once("end", () => {formData = qs.parse(formData);console.log(formData); // objectconsole.log("数据接收完成");});}
}).listen(3000);

使用 formidable 上传文件

/*** 使用formidable上传图片*/
const http = require("http");
const fs   = require("fs");
const formidable = require("formidable");
const uuidv1 = require("uuid/v1");
const path = require("path");http.createServer((request, response) => {if (request.url == "/") {fs.readFile(__dirname+"/index.html", (err, data)=>{if (err) {throw err;}response.setHeader("content-type", "text/html;charset=utf8;");response.end(data.toString());});}if (request.url === "/post" && request.method.toLowerCase() === "post") {// 1.实例化对象const form = new formidable();// 2.设置文件上传的路径, 默认就会自动上传到这个目录中,这个目录必须要存在,否则报错, 不建议使用相对路径form.uploadDir = __dirname + '/uploads';// 3.获取表单内容form.parse(request, (err, fields, files)=> {/****************** 利用formidable的文件名// 3.1 获取原文件名let ext     = path.extname(files.file.name);// 3.2 获取上传文件的路径let oldPath = files.file.path;// 3.3 拼接新路径let newPath = oldPath + ext;console.log(newPath);// 3.4 修改文件名或者使用 uuid 这个包, 二选一************************************/// 3.1 获取独一无二的一个字符串 uuid let uuid = uuidv1();// 3.2 获取上传文件的后缀let ext = path.extname(files.file.name);// 3.3 获取路径let oldPath = files.file.path;let newPath = __dirname + "/uploads/" + uuid + ext;// 3.4 修改文件名fs.rename(oldPath, newPath, err=>{if (err) throw err;response.end("文件上传成功");});response.end("images");});}// response.end("404");
}).listen(3000);

转载于:https://www.cnblogs.com/liaohui5/p/10581624.html

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

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

相关文章

c语言程序设计 银行整存整取,《C语言程序设计习题试题集》.doc

《C语言程序设计习题试题集》.doc1、已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年0.330% 期限二年0.345% 期限三年0.375% 期限五年0.420% 期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。2、输入年份year…

Grove——.NET中的ORM实现

Grove——.NET中的ORM实现 发布日期: 6/30/2005| 更新日期: 6/30/2005作者:林学鹏 ORM的全称是Object Relational Mapping,即对象关系映射。它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来&a…

let和const

发布自Kindem的博客,欢迎大家转载,但是要注意注明出处。另外,该文章收纳在Kindem的个人的 IT 知识整理仓库,欢迎 Star、Fork、投稿 let let是在ES6加入的新的变量声明方法,let声明变量的方法和var类似: let a hello; …

GIT 操作笔记

设置不用每次都输入 账号密码 git config --global credential.helper store然后,下次再输入一次 账号密码 就可以了。删除github上的文件$ git pull origin master 将远程仓库里面的项目拉下来$ dir 查看有哪些文件夹$ git rm -r --cached target 删除target文件…

[book]道法自然

前不久读了王咏刚的〈凌波微步〉和〈凌波微步II〉,感觉不错。今天把他老人家的《道法自然》也买了下来。在dearbook看到关于这本书的长篇大评,也一块copy了下来:http://www.dearbook.com.cn/book/viewbook.aspx?pnoTS0023954认真的作者&…

c语言编手机蓝牙软件的代码,51单片机C语言的简易蓝牙锁代码

#include#define uint unsigned int#define uchar unsigned charuchar r_buf; //蓝牙接收到的字符存储缓冲区sbit PWMAP2^0; //电机驱动模块接口sbit IN1P2^2;sbit IN2P2^1;sbit STBYP2^3;sbit LED1P0^0; //LED灯接口sbit LED2P0^1;sbit LED3P0^2;sbit key1P1^0;…

列表嵌套字典,根据字典某一key排序

在返回列表嵌套字典时候,往往需要对数据进行一定的处理:按照字典中某一个key排序 In [87]: a [{"name": "牛郎", "age": 23},{"name":"许仙", "age": 20},{"name":"董永&q…

display: inline-block 布局

三个元素display: inline-block; 布局 ,其中一个元素中存在其他元素也用了display: inline-block; 无法垂直居中,将这个元素设置为display: inline; 转载于:https://www.cnblogs.com/Running00/p/11163751.html

GCC精彩之旅

在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。目前 Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI…

写出C语言中5种数据类型的名称及其关键字,求C语言中的32个关键字及其意思?...

关键字如下:一、数据类型关键字(12个):(1) char :声明字符型变量或函数(2) double :声明双精度变量或函数(3) enum :声明枚举类型(4) float:声明浮点型变量或函数(5) int: 声明整型变量或函数(6…

想要设计自己的微服务?看这篇文章就对了

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文由我就静静地看 发表于云社区专栏 本文通过使用Spring Boot,Spring Cloud和Docker构建的概念验证应用程序的示例,为了解常见的微服务架构模式提供了一个起点。 该代码在Github上…

函数的嵌套调用

在函数的内部调用其他的函数 def index(): func() print("index") def func(): index() # def index():# func()# print("index")## def func():# print("func")# index()#def my_max(x,y): #这个函数的作用就是比大小谁大打印出…

mysql 开发进阶篇系列 41 mysql日志之慢查询日志

一.概述 慢查询日志记录了所有的超过sql语句( 超时参数long_query_time单位 秒),获得表锁定的时间不算作执行时间。慢日志默认写入到参数datadir(数据目录)指定的路径下。默认文件名是[hostname]_slow.log,默认超时是10秒,默认不开…

分数相同名次排名规则C语言,如何给数据排名(相同分数相同名次)-excel篇

使用Rank函数来做数据排名该函数是返回一个数值在一个数字列表中的排名。语法:RANK(number,ref,order)RANK(对象,范围,参数)number(必填参数):是特定单位格中的数据,需要在整个数字列表中排名的单个对象。ref(必填参数):是指需要排名的整体数列。即范围&…

子窗体列表在菜单中的实现

想在菜单中加入子窗体的列表,上网找了半天,都很麻烦,后来看看了菜单的属性,发现里面有个MdiList属性,设置成true,搞定,晕。 转载于:https://www.cnblogs.com/catzhou/articles/258450.html

MySql的连接查询

若一个查询同时涉及到两个或者两个以上的表,则称之为连接查询。常见的包括:等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询(左右连接)。 1.等值与非等值连接查询…

linux下ssh通过公钥登录服务器

经常会通过ssh登录远程服务器,一种是通过密码方式登录,一种是通过公钥登录。 如何设置通过公钥登录服务器 1. 首先生成自己的公钥和私钥 ssh-keygen 命令用来生成公钥和私钥-t 用来指定密钥类型(dsa | ecdsa | ed25519 | rsa | rsa1&#xff…

qt运行C语言后无显示,qt designer启动后不显示界面问题的原因与解决办法-站长资讯中心...

Qt 5.6.1无论是在vs里双击ui文件还是直接启动designer.exe都一直无法显示界面,但任务管理器中可以看到该进程是存在的。前几天还正常的,但昨天加了一块NVIDIA的显卡(机器自带核显),可能与此有关。幸好还可以通过QtCreator打开ui文件进行编辑。…

OpenSolaris北京用户组的第一次活动

OpenSolaris北京用户组的第一次活动作者: BadcoffeeEmail: blog.olivergmail.comBlog: http://blog.csdn.net/yayong2005年10月10月15号,OpenSolaris北京用户组在北京西郊宾馆会议厅组织了成立以来的第一次活动。尽管OpenSolaris早在2005年6月14日就正式开放源代码&…

. SQL多条件查询存储过程

编辑器加SQL多条件查询存储过程 2010-05-13 17:06:29| 分类: SQL | 标签: |字号大中小 订阅 . 例一、 ALTER proc SelectProduct ProdID varchar(10), ProdName nvarchar(30), CategoryID varchar(5), MinPrice decimal(10,2), MaxPrice decimal(10,2) a…