node.js上传图片接口

作者:郏国上日期:2025/10/21

node.js需要使用koa-multer库来实现上传图片接口。
实际上先通过koa-multer下载到本地指定目录,然后上传到阿里云(部分格式图片需要转换成网络格式图片jgp再上传)。
首先在系统启动文件引入注册路由:

1app.use(BodyParser({
2    'formLimit':'3mb',
3    'jsonLimit':'3mb',
4    'textLimit':'3mb'
5}));
6// 注意顺序,必须body parser在前, router在后
7app.use(router.routes());
8
9// 1. 注册基础路由 注意顺序,必须body parser在前, router在后
10const routes = require('./app/routes/index.js');
11app.use(routes.routes());
12app.use(routes.allowedMethods());
13
14// 2. 初始化Main路由
15const Main = require('./app/main_erp.js');
16Main.init(router);
17
18// 3. 将Main路由注册到Koa应用
19app.use(router.routes());
20app.use(router.allowedMethods());
21

注意:3. 将Main路由注册到Koa应用不能省,不然无法接收到接口传递过来的文件。
具体的图片的下载和上传代码:

1const ImageTool = require('@app/tools/image_tool.js');
2var Main = {};
3
4// 处理图片
5const fs = require('fs');
6const path = require('path');
7
8// 上传处理
9const Multer = require('koa-multer');
10const IMAGE_PATH = 'upload/image';
11// 存储位置
12let image_storage = Multer.diskStorage({
13    destination: function (req, file, cb) {
14        cb(null, IMAGE_PATH);
15    },
16    filename: function (req, file, cb) {
17        //cb(null, Date.now() + '_' + makeid(6) + path.extname(file.originalname));
18        cb(null, file.originalname);
19    }
20});
21const ImageUploader = Multer({
22    storage: image_storage,
23    limits: {
24        fileSize: 50 * 1024 * 1024 // 50MB限制
25    }
26});
27
28async function dealImg(ctx) {
29    // 获取文件扩展名
30    const fileExt = path.extname(ctx.req.file.originalname).toLowerCase();
31    
32    // 支持的格式,直接上传原文件
33    const readStream = fs.createReadStream(ctx.req.file.path);
34    let arr = ctx.req.file.path.split('/');
35    let filename = '/img/' + arr[arr.length - 1];
36    //上传图片到阿里云
37    return ImageTool.uploadImage(filename, fileExt, readStream, null, ctx.req.file.path);
38}
39
40/**
41 * 路由
42 * @param {*} router 
43 */
44function createRouteMap(router) {
45    // 图片上传接口
46    // 特殊接口,由于依赖Muler, 必须单独定义
47    router.post('/api/uploadImage', ImageUploader.single('pic'), async (ctx, next) => {
48        ctx.body = await dealImg(ctx);
49    });
50}
51
52Main.init = function(router) {
53    console.log('Main');
54    // console.log('router:', router);
55    createRouteMap(router);
56};
57
58module.exports = Main;
59

node.js上传图片接口》 是转载文章,点击查看原文


相关推荐


SpringBoot的学习
ʚ希希ɞ ྀ2025/10/20

学习目标: 1.掌握基于SpringBoot框架的程序开发步骤 2.熟练使用SpringBoot配置信息修改服务器配置 3.基于SpringBoot的完成SSM整合项目开发 下图创建一个Spring模块: 下图是一个SpringBoot程序最基本的架子: 如下一个SpringBoot程序就开发好了。 SpringBoot程序之所以好用是因为pom文件中的继承和一个dependency: 最后运行Application类: Spring程序和S


小杰深度学习(sixteen)——视觉-经典神经网络——MobileNetV2
jie*2025/10/19

7.MobileNetV2 1. 网络的背景 MobileNetV1 还不够轻量和高性能,为了让移动设备有更好的体验,Google 团队提出了 MobileNetV2 架构 MobileNetV2网络是由谷歌团队在2018年提出的,它相对于MobileNetV1而言,有着更高的准确率和更小的网络模型。 论文地址:https://arxiv.org/abs/1801.04381 Inverted Residuals and Linear Bottlenecks.pdf 2. 网络的


C#:函数默认参数
曹牧2025/10/17

C#函数默认参数允许在方法定义时为参数指定默认值,当调用时未提供该参数值则自动使用默认值:    ‌1、基本语法‌     在方法声明中通过参数名=默认值形式定义,例如void Print(string msg="default")。调用时可省略有默认值的参数Print(),此时msg取值为"default"。    ‌2、使用规则‌         默认参数必须从右向左连续定义,即某个参数有默认值后,其右侧所有参数必须都有默认值        默认值必须是编译时常量,不支持运行时动态赋值


【项目实战 Day12】springboot + vue 苍穹外卖系统(Apache POI + 工作台模块 + Excel表格导出 完结)
Roye_ack2025/10/16

目录 一、工作台模块 1、查询今日运营数据 - GET接口 (1)需求分析 (2)代码开发 2、查询今日运营数据 - GET接口 (1)需求分析 (2)代码开发 3、查询菜品总览 - GET接口 (1)需求分析 (2)代码开发 4、查询套餐总览 - GET接口 (1)需求分析 (2)代码开发 二、Excel表格导出 1、Apache POI (1)入门案例 2、导出Excel表格模块 (1)需求分析 (2)代码开发 【1】导入excel模板文件 【2】c


【HarmonyOS Bug踩坑】主窗口调用的接口,UI在子窗口异常显示
GeorgeGcs2025/10/15

【HarmonyOS Bug踩坑】主窗口调用的UI表现在子窗口异常显示 一、问题现象: 这个问题的标题略显抽象,毕竟涉及到的异常表现形式太多,标题是临时拟定的。 说白了,这个问题是鸿蒙里经典的上下文指定问题。 异常的业务场景是,在主窗口之上,添加一个子窗口。当在主窗口里调用某些UI表现,例如:气泡,弹窗,模态窗口,自定义安全键盘,自定义loading等,你会发现,有时候都异常加载到子窗口中了,并没有在主窗口显示。如下图所示: import { window } from '@kit.ArkUI


k8s-pod的启动
Code Rhythm2025/10/13

k8s-pod的启动 一、命令行启动nginx的pod创建deployment访问节点中的nginx查看部署控制器和副本控制器模拟高可用,将k8s-3关机手动触发重建删除rs会重新启新的rs删除deploy,所管理的rs也会被删除 二、yaml文件启podkubectl apply 启动podkubectl apply 使用部署控制器启动pod 三、pod的启动流程四、pod的终止过程 官方文档:https://kubernetes.io/zh-cn/docs/concept


敏捷开发流程-精简版
暖阳_2025/10/12

敏捷开发流程 - 精简版(实战版) 版本: v1.0 更新日期: 2025-10-11 适用场景: 中小型团队快速迭代开发 🎯 流程全景图 📋 5大阶段详解 阶段1:需求收集 → 业务需求文档 负责人: 项目经理 输入: 用户原始需求(口头/邮件/会议记录) 核心工作: 收集用户需求 整理为层级结构(一级-二级-三级) 组织需求评审会①(内部简单评审) 产出物: ✅ 业务需求文档(层级结构) 评审点:需求评审会① 参与人:项目经理、产品经理 目的:快速确认需求方向和范围 输


门诊场景评测深度分析报告:医生-病人-测量代理交互对诊断影响机制研究(上)
Allen_Lyb2025/10/10

引言 医疗人工智能(AI)的发展正从静态问答系统向动态交互式决策助手演进,大型语言模型(LLM)在医学领域测评中展现出显著进步,如美国医学执照考试正确率从 2021 年 9 月的 38.1% 提升至 2023 年 11 月的 90.2%,超越人类专家平均水平(87%)[1][2]。然而,临床决策的复杂、顺序性本质与多模态数据收集需求,使得依赖静态问答的传统评估方法难以准确描绘 AI 系统的真实临床能力——研究表明,动态决策环境下诊断准确率可降至静态问答的 1/10 以下[3][4]。与此同时,


Android Studio 新功能 Journey Test:借助 AI 实现基于自然语言的 UI 测试用例编写
fundroid2025/10/9

在 Android 应用开发中,大家经常使用单元测试框架进行 UI 测试。随着技术演进,Android Studio 推出的 Journey Test 功能,依托 Gemini AI,为 UI 测试带来了全新的范式转变。 核心能力:自然语言与 AI 驱动的测试 Journey Test 最大的亮点在于结合了自然语言和 Gemini AI 的能力。开发者无需再埋头于复杂的代码编写,只需用日常的自然语言描述测试步骤,比如 “在邮箱输入框中输入 [email protected]”“验证是否显示‘邮箱为


【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
凉凉心.2025/10/7

1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册 2. 什么是服务注册与发现 Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务使用Eureka的客户端连接到Eureka

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0