当前位置: 首页 > article >正文

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

本项目旨在学习如何快速使用 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.kler.cn/news/363032.html

相关文章:

  • NoSQL 数据库 Redis
  • 软件开发术语(E开头)---持续更新
  • ubuntu 安装keepalived+haproxy
  • 力扣困难题汇总(16道)
  • 如何让别人喜欢你的代码
  • 【知识科普】websocket深入了解
  • 常用环境部署(二十一)——Docker将一台服务器的镜像移动到另外一台服务器
  • 【LLM之Agent】《Tool Learning with Large Language Models: A Survey》论文阅读笔记
  • Centos7安装sqoop1.4.7超详细教程
  • Android 默认去掉URL网络校验,设置不进行网络校验
  • Arm和高通闹翻在即,或影响骁龙 8 Elite
  • stm32实现esp8266连接到TCP服务器(二)
  • http——配置nginx服务通过ip访问多网站
  • 熟悉架构框架:TOGAF的四大核心架构
  • 依赖标签分类任务Smin值计算(蛋白质功能预测,GO标签)
  • 软考——计算机网络概论
  • 人工智能:技术的变革与未来的无限可能
  • HTTP 与 HTTPS 的区别:原理、安全性与应用场景
  • 交替打印数字/拓展多线程/多种实现方式
  • 德高望重的c语言
  • 量子纠错--shor‘s 码
  • Fast-LLM:加速大型语言模型训练的开源库
  • 抖店自动售后系统
  • # Tomcat NIO 配置实操指南
  • pytorch nn.NLLLoss和nn.CrossEntropyLoss函数区别
  • vue,java,webSocket通讯,服务端主动给多客户端发消息