【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (五):POST上传文件的设置

devtools/2024/10/24 21:44:30/

本项目旨在学习如何快速使用 nodejs 开发后端api,并为以后开展其他项目的开启提供简易的后端模版。(非后端工程师)
由于文档是代码写完之后,为了记录项目中需要注意的技术点,因此文档的叙述方式并非开发顺序(并非循序渐进的教学文档)。建议配合项目源码node-mongodb-template 。

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (一):项目简介及安装依赖

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (二):项目文件夹架构及路由的设置

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (三):Cors的设置及.env文件的设置

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (四):状态码的使用

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (五):POST上传文件的设置

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (六):token的设置

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (七):MongoDB的设置

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (八):API说明(暂时完结,后续考虑将在线版mongoDB变为本地版)

POST上传文件的设置

使用依赖 Multer 上传文件,用于处理 multipart/form-data 类型的表单数据。

这里以创建一个product,表单中需要上传 productImage 为例。

  • 安装依赖

pnpm i --save multer

  • 引用依赖
//routers\products.js
const multer = require('multer');
  • 设置文件的存储storage

destination 文件的存储位置,在根目录中创建一个文件夹uploads

filename 文件的命名, 举例:2024-09-04T14:14:22.081Z11.jpeg

const storage = multer.diskStorage({destination: function(req,file,cb){cb(null,'./uploads/')},filename: function(req,file,cb){cb(null,new Date().toISOString() + file.originalname)},
});
  • 筛选文件fileFilter

文件类型为 png/jpeg

const fileFilter = (req,file,cb)=>{if(file.mimetype === 'image/jpeg' || file.mimetype === 'image/png'){cb(null,true);}else{cb(null,false);}
};
  • 上传文件的全部设置 Options

multer(options)

//fileSize文件大小设置
const upload = multer({storage: storage,limits:{fileSize:1024*1024*5},fileFilter: fileFilter
});
  • 读取文件

upload.single('fieldname') 接受一个以 fieldname 命名的文件。这个文件的信息保存在 req.file

router.post('/',upload.single('productImage'),(req,res,next) => {const product = new Product({_id:new mongoose.Types.ObjectId(),name:req.body.name,price:req.body.price,productImage:req.file.path});product.save().then(result=>{res.status(201).json({message:'Create product successfully' ,createdProduct: {result: result,request:{type: 'GET',url: 'http://localhost:3000/products/'+result._id}}});}).catch(err=>{res.status(500).json({error:err});});});
  • postman中上传文件

Body的格式修改成 form-data

Key: productImage,并格式设置为File

Value: 选择文件


http://www.ppmy.cn/devtools/128519.html

相关文章

云曦10月13日awd复现

一、防御 1、改用户密码 passwd <user> 2、改数据库密码 进入数据库 mysql -uroot -proot 改密码 update mysql.user set passwordpassword(新密码) where userroot; 查看用户信息密码 select host,user,password from mysql.user; 改配置文件&#xff0c;将密码改为自己…

算法Day-3

链表&#xff08;Linked List&#xff09; 是一种线性数据结构&#xff0c;它由一系列节点&#xff08;Node&#xff09;组成&#xff0c;每个节点包含两部分&#xff1a; 数据域&#xff1a;存储数据元素。指针域&#xff1a;存储指向下一个节点的引用&#xff08;或者是指针…

数据库实战:MySQL、SQL语句总结与应用案例分享

生活最大的危险在于一个空虚的心 文章目录 MySQLSQL语句总结 MySQL 数据库服务器数据库 (一般来说&#xff0c;一个项目&#xff0c;都会使用一个独立的数据库)数据表 (真正存储数据&#xff0c;和excel表差不多)行与列 (每一行代表一条数据&#xff0c;列又叫做字段) SQL语句…

050_python基于Python的黑龙江旅游景点数据分析系统的实现

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

分布式存储架构 与分布式一致性协议

分布式存储架构可以分为无中心节点架构和有中心节点架构。它们的设计在系统中的角色分配、数据管理、协调方式等方面有所不同。 1. 无中心节点架构&#xff08;Decentralized/Peer-to-Peer Architecture&#xff09; 在无中心节点的分布式存储架构中&#xff0c;所有节点都是…

链表(虚拟头节点)

链表 题 移除链表元素 虚拟头节点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.…

Open3D-Geometry-11:Mesh deformation 网格变形算法

1. as-rigid-as-possible 如果想根据少量约束使三角形网格变形,可以使用网格变形算法。 Open3D 通过SorkineAndAlexa2007实现了 as-rigid-as-possible 方法,优化了以下能量函数 ∑ i ∑ j ∈ N ( i

解锁PDF权限密码

目录 背景: 定义与功能&#xff1a; 过程&#xff1a; 主要功能&#xff1a; 使用方式&#xff1a; 使用限制&#xff1a; 注意事项&#xff1a; 总结&#xff1a; 背景: 前段时间自己设置了PDF文件的许可口令&#xff0c;忘了口令导致自己无法编辑内容等&#xff0c;这…