通过nodejs实现文件的上传

主要内容

本文将用来讲述如何通过nodejs进行文件上传,将会涉及到以下知识点:

  1. 通过express模块进行服务器的搭建
  2. 通过multer模块将上传的文件保存到指定目录
  3. 通过fs、path模块将文件改名,添加后缀
  4. 进行已上传文件的预览

思想

前端表单->后端接收文件本身->保存到服务器上->给数据库记录文件的一些信息->返回给nodejs相关信息->nodejs返回前端

注意:enctype必须得是multipart/form-data

<input type=file enctype="multipart/form-data" name="fieldname">

实现

multer->文件名随机->fs模块改名->path模块解析磁盘路径


本文将上传图片为例,下面开始详细的设计:

将需要用到的相关模块下载引入

该模块可以通过npm下载,npm的下载以及相关操作这里就不再诉说了,不是重点

npm init -y
npm i express multer

引入模块

const express = require("express");
const path = require("path");
const fs = require("fs");
const multer = require("multer");

服务器搭建

接下来将模块导入,搭建服务,监听端口

const app=express();
app.listen(8083,"localhost",()=>{
console.log("监听8083端口成功");//监听成功执行的回调函数
})

multer实例化以及安装该中间件

let objMulter = multer({ dest: "./public/upload" });
//实例化multer,传递的参数对象,dest表示上传文件的存储路径
app.use(objMulter.any())//any表示任意类型的文件
// app.use(objMulter.image())//仅允许上传图片类型

静态资源托管

app.use(express.static("./public"));//将静态资源托管,这样才能在浏览器上直接访问预览图片或则html页面

新建接口获取发送过来的图片

通过打印req.files可知

fieldname: 表单name名

originalname: 上传的文件名

encoding: 编码方式

mimetype: 文件类型

buffer: 文件本身

size:尺寸

destination: 保存路径

filename: 保存后的文件名 不含后缀

path: 保存磁盘路径+保存后的文件名 不含后缀

app.post("/api/reg", (req, res) => {
let oldName = req.files[0].path;//获取名字
//给新名字加上原来的后缀
let newName = req.files[0].path + path.parse(req.files[0].originalname).ext;
fs.renameSync(oldName, newName);//改图片的名字
res.send({
err: 0,
url:
"http://localhost:8083/upload/" +
req.files[0].filename +
path.parse(req.files[0].originalname).ext//该图片的预览路径
});
});

通过postman软件上传图片检验



以上就是通过nodejs,简单的图片文件上传流程,都是本人的学习记录,如有不对,欢迎指出~

まだね~

完整代码如下

const express = require("express");
const path = require("path");
const fs = require("fs");
const multer = require("multer"); const app = express();
app.listen(8083, "localhost", () => {
console.log("已经监听8083端口");
}); let objMulter = multer({ dest: "./public/upload" }); //实例化multer,传递的参数对象,dest表示上传文件的存储路径
app.use(objMulter.any()); //any表示任意类型的文件
// app.use(objMulter.image())//仅允许上传图片类型 app.use(express.static("./public"));
app.post("/api/reg", (req, res) => {
let oldName = req.files[0].path;
let newName = req.files[0].path + path.parse(req.files[0].originalname).ext;
fs.renameSync(oldName, newName);
res.send({
err: 0,
url:
"http://localhost:8083/upload/" +
req.files[0].filename +
path.parse(req.files[0].originalname).ext
});
});

最新文章

  1. windows平台整合Apache与tomcat
  2. JProfiler学习笔记
  3. CentOS 6 日期 时间,时区,设置修改及时间同步
  4. C#反射代码
  5. 【原创】PostSharp入门笔记
  6. ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
  7. 处理通过&lt;input type=&quot;file&quot;&gt;的Post 请求
  8. jquery优化引发的思考
  9. JavaSE学习总结第10天_面向对象5
  10. JavaScript实例技巧精选(12)—计算星座与属相
  11. 求a和b的最大公约数
  12. 超实用 JS 代码段笔记(一)
  13. DevExpress 控件使用之GridControl基本属性设置
  14. Debugging java application with netbean
  15. 【Luogu3455】【POI2007】ZAP-Queries(莫比乌斯反演)
  16. bzoj5100 [POI2018]Plan metra 构造
  17. 混合物App开发中,在移动设备上调试查看日志,重写window.console
  18. python田忌赛马
  19. java线程之二(synchronize和volatile方法)
  20. JProfiler进行Java运行时内存分析

热门文章

  1. [LC] 250. Count Univalue Subtrees
  2. [LC] 139. Word Break
  3. pytorch中的view函数和max函数
  4. 89)PHP,跳转练习(1)
  5. RAM子账户登录DMS对库进行管理
  6. TCP 为什么是三次握手,而不是两次或四次?
  7. [转]&lt;版本一&gt;写代码的小女孩
  8. 吴裕雄--天生自然 PYTHON数据分析:医疗数据分析
  9. python 面向对象静态方法、类方法、属性方法、类的特殊成员方法
  10. git 学习 3