Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Koa.js中实现文件上传的接口

在Koa.js中实现文件上传的接口

作者头像
张张
修改于 2019-12-27 02:26:34
修改于 2019-12-27 02:26:34
5K00
代码可运行
举报
运行总次数:0
代码可运行

文件上传是一个基本的功能,每个系统几乎都会有,比如上传图片、上传Excel等。那么在Node Koa应用中如何实现一个支持文件上传的接口呢?本文从环境准备开始、最后分别用 Postman 和一个HTML页面来测试。

环境准备

首先当然是要初始化一个Koa项目了,安装 Koa、koa-router 即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	npm install koa koa-router

设置图片上传目录,把图片上传到指定的目录中,在 app 路径下新建 public 文件夹,目录结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
koa-upload/
--app
----public
------uploads
----index.js
--package.json

编写 index.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const koa = require('koa')
const app = new koa()
router.post('/upload', ctx => {
    ctx.body = 'koa upload demo'
})
app.use(router.routes());
app.listen(3000, () => {
    console.log('启动成功')
    console.log('http://localhost:3000')
});

然后启动,确保这一步没有问题。

使用 koa-body 中间件获取上传的文件

koa-body 支持文件、json、form格式的请求体,安装 koa-body

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	npm install koa-body

设置 koaBody 配置参数,index.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const koa = require('koa')
const koaBody = require('koa-body')
const path = require('path')
const app = new koa()
app.use(koaBody({
    // 支持文件格式
    multipart: true,
    formidable: {
        // 上传目录
        uploadDir: path.join(__dirname, 'public/uploads'),
        // 保留文件扩展名
        keepExtensions: true,
    }
}));
... ...

接下来完善 /upload 路由,获取文件,然后直接返回文件路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router.post('/upload', ctx => {
    const file = ctx.request.files.file
    ctx.body = { path: file.path }
})

这样我们其实已经可以进行文件上传,并把文件上传到 public/uploads 中了,我们用 Postman 来测试一下。

使用 Postman 测试

打开 Postman,输入 http://localhost:3001/upload,选择 POST 方法,并且选择文件用 Body 来传输,并且选择 form-data 格式,然后在 KEY 中选择 file类型。

然后就可以选择图片进行上传了,上传成功后就可以看到 uploads 文件夹下有利一个图片了,并且输出量图片的路径。

使用 koa-static 中间件生成图片链接

直接返回图片的本地路径在实际上是没什么用的,我们应该返回一个http链接的图片地址,点击地址就可以查看图片。

借助 koa-static 中间件可以帮助我们生成一个静态服务,它指定一个文件夹,文件夹下所有的文件都可以通过 http服务来访问。

安装:npm install koa-static 并注册到 app 上,我们把他注册在 koaBody 中间件的前面,把 public 设置为静态文件目录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const koaStatic = require('koa-static')
... ...
app.use(koaStatic(path.join(__dirname, 'public')))

启动程序,这样 public 下的文件就可以使用HTTP服务来大开了,我们可以打开之前上传的图片:http://localhost:3001/uploads/upload_65c1d26e5a47870cf4011aad1243fce0.png,可以在浏览器中直接显示了。

然后我们改造一下 upload 路由的实现,让它生成图片链接返回给客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router.post('/upload', ctx => {
    const file = ctx.request.files.file
    const basename = path.basename(file.path)
    ctx.body = { "url": `${ctx.origin}/uploads/${basename}` }
})

basename 可以拿到文件的文件名和扩展名,ctx.origin 拿到服务器域名,即诸如 localhost:3001,但我们不能写死。

再用 Postman 测试一下,即可看到返回的 图片URL了,点击可以直接打开。

编写前端页面上传文件

前面我们用 Postman 模拟了上传文件进行测试,虽然可以高效的测试我们编写的后端接口,但是我们前端有些同学可能通常更熟悉前端页面的方式测试,那么我们来写一个表单页面来测试。

在 public 中新建 upload.html 文件作为测试页面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">上传</button>
</form>

这是传统的表单提交,我们实际工作中这样的代码可能已经不常见了,action 就是我们的提交到的接口,enctype="multipart/form-data" 就是指定上传文件格式。input 的 name 属性一定要等于file,因为我们接受的字段名是 file。

然后我们用HTTP服务打开这个页面:http://localhost:3001/upload.html,因为我们整个 public 目录已经是一个静态HTTP服务目录了,里面的所有文件都可以通过HTTP访问。

选择文件,点击上传,上传成功后可以看到返回了文件地址

全文完。完整源码

本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!

本文链接:https://zhangbing.site/2019/03/07/Node-Koa-upload/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《大胖 • 小课》- 写一个文件上传接口
这是《大胖小课》栏目的专题一《说说文件上传那些事儿》的第二节-《写一个文件上传接口》
zz_jesse
2020/03/17
5130
【koa快速入门】之最佳实践
前一节我们已经讲过koa的基本使用(不了解的可以先读读这篇文章《koa快速入门之基础使用》,下面的思维导图列出来大概的知识),但是都是基于单文件开发的,本文介绍一下koa项目开发的最佳实践。
luciozhang
2023/04/22
8790
【koa快速入门】之最佳实践
【Koa】385- koa框架的快速入门与使用
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
pingan8787
2019/10/23
5800
antdesign + koa 实现图片上传
我们今天实现一下图片上传,前端用到的是antdesign中的文件上传,后端是自己封装的node的koa框架。
用户4793865
2023/01/12
8920
Koa 框架教程
Node 主要用在开发 Web 应用。这决定了使用 Node,往往离不开 Web 应用框架。 Koa 就是一种简单好用的 Web 框架。它的特点是优雅、简洁、表达力强、自由度高。本身代码只有1000多
ruanyf
2018/04/12
1.5K0
Koa 框架教程
我用nodejs实现了热加载接口文件,感觉又离“serverless”进了一步
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
爱吃大橘
2022/12/27
4750
深入浅出 Koa2:现代 Node.js 框架
Koa2 是一个现代的、简洁的 Node.js 框架,由 Express 团队设计和开发。与 Express 相比,Koa2 提供了更加精简和强大的功能,特别是其中间件处理机制和异步编程能力,深受开发者喜爱。本文将详细介绍 Koa2 的安装、基本用法、核心概念及其高级功能,并通过示例代码展示如何构建一个功能完整的 Web 应用程序。
Michel_Rolle
2024/07/31
2.7K0
Node.js 应用:Koa2 之文件上传下载
上传下载在 web 应用中还是比较常见的,无论是图片还是其他文件等。在 Koa 中,有很多中间件可以帮助我们快速的实现功能。
用户1065635
2019/11/27
3.8K0
koa实践及其手撸
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。
一粒小麦
2019/07/18
1.2K0
koa实践及其手撸
Nodejs实现图片的上传、压缩预览、定时删除。
这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力、更健壮的web框架。
Vam的金豆之路
2021/11/30
1.5K0
Nodejs实现图片的上传、压缩预览、定时删除。
手把手搭建koa2后端服务器-日志模块和文件上传
添加日志模块 日志记录是网站开发必备的模块,方便我们进行线上问题定位。 安装 log4js yarn add log4js yarn add -D @types/log4js 配置和使用 配置文件中增加日志配置 src/config/index.ts log: { appenders: { out: { type: 'stdout' }, app: { type: 'file', filename: 'logs/app.log',
星星在线
2022/03/29
8300
node-koa 框架 项目搭建 🏗
---- 这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」 代码[链接🔗]:(https://gitee.com/yang-yiming1234/koa/tree/master) 持续更新~ 简介 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了
用户4793865
2023/01/12
3.5K0
写给新手前端的各种文件上传攻略,从小图片到大文件断点续传
今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受。这么好的光阴怎么浪费,睡觉、吃饭、打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完。
coder_koala
2019/11/04
3.2K0
写给新手前端的各种文件上传攻略,从小图片到大文件断点续传
知新 | koa框架入门到熟练第二章
[wp_editor_md_211ccaf408f127f491c28c16e945e4cd.jpg]
mySoul
2020/07/17
6620
koa实战_2023-02-28
sequelize这个包专门用于项目中处理关系型数据库的操作,它是基于 promise 的
用户10377376
2023/02/28
1.3K0
koa搭建node服务
介绍 使用koa搭建node服务 并连接mongodb返回前端数据 git https://gitee.com/wjj0720/koa... 项目初始化 首先保证你的node环境已经就绪 1、创建项目文件夹 创建文件夹test,在文件夹中shift+右键 在此处运行命令行 运行 npm init --y 2、 安装依赖 npm i koa koa-body koa-static koa-cors 创建服务 // server.js /* * 1、在项目文件中创建一个server.js文件
random_wang
2019/09/11
8440
Koa 框架教程
Node 主要用在开发 Web 应用。这决定了使用 Node,往往离不开 Web 应用框架。 Koa就是一种简单好用的 Web 框架。它的特点是优雅、简洁、表达力强、自由度高。本身代码只有1000多行,所有功能都通过插件实现,很符合 Unix 哲学。 本文从零开始,循序渐进,教会你如何使用 Koa 写出自己的 Web 应用。每一步都有简洁易懂的示例,希望让大家一看就懂。 零、准备 首先,检查 Node 版本。 $ node -v v8.0.0 Koa 必须使用 7.6 以上的版本。如果你的版本低于这个要
企鹅号小编
2018/02/08
9970
Koa 框架教程
node.js之koa2知识点总结
第一个程序 const Koa = require('koa') const app = new Koa() app.use(async ctx => { ctx.body = 'Hello Koa2' }) app.listen(3000) console.log('server is running at port 3000') 路由 简单路由 const Koa = require('koa') const app = new Koa() const Router = require('k
YungFan
2020/12/07
4510
Nodejs实现图片的上传、压缩预览、定时删除
我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番。 第一步,node基本配置
马克社区
2022/06/14
1.1K0
koa实战
sequelize这个包专门用于项目中处理关系型数据库的操作,它是基于 promise 的
coder2028
2022/10/21
1.1K0
相关推荐
《大胖 • 小课》- 写一个文件上传接口
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验