在 Web 应用程序中,文件上传和下载是必不可少的功能之一。Koa2 是一个流行的 Node.js Web 框架,它提供了一种简单而灵活的方式来实现文件上传和下载的功能。
本文将介绍如何在 Koa2 中实现文件上传和下载,并提供示例代码和指导意义。
文件上传
文件上传是指将本地文件传输到 Web 服务器的过程。在 Koa2 中,可以使用 koa-body 和 koa-multer 中间件来处理文件上传。
使用 koa-body 中间件
koa-body 是一个处理 HTTP 请求体的中间件,可以用于解析 JSON、表单、文本和二进制数据等类型的请求体。它可以帮助我们处理文件上传。
首先,我们需要安装 koa-body:
npm install koa-body
然后,在 Koa2 应用程序中使用 koa-body 中间件:
const Koa = require('koa') const bodyParser = require('koa-body') const app = new Koa() app.use(bodyParser())
现在,我们可以在 Koa2 中处理文件上传了。下面是一个示例代码:
const Koa = require('koa') const bodyParser = require('koa-body') const path = require('path') const fs = require('fs') const app = new Koa() app.use(bodyParser()) app.use(async (ctx) => { if (ctx.method === 'POST' && ctx.path === '/upload') { const file = ctx.request.files.file const reader = fs.createReadStream(file.path) const stream = fs.createWriteStream(path.join(__dirname, '/uploads', file.name)) reader.pipe(stream) ctx.body = '文件上传成功' } }) app.listen(3000, () => { console.log('服务器已启动') })
在上面的代码中,我们使用了 createReadStream 和 createWriteStream 方法来读取和写入文件。我们还使用了 pipe 方法来将文件数据从读取流传输到写入流。
使用 koa-multer 中间件
koa-multer 是一个处理文件上传的中间件,它基于 multer 库,可以帮助我们处理多个文件上传。
首先,我们需要安装 koa-multer:
npm install koa-multer
然后,在 Koa2 应用程序中使用 koa-multer 中间件:
const Koa = require('koa') const multer = require('koa-multer') const app = new Koa() const upload = multer({ dest: 'uploads/' }) app.use(upload.any())
现在,我们可以在 Koa2 中处理多个文件上传了。下面是一个示例代码:
const Koa = require('koa') const multer = require('koa-multer') const path = require('path') const app = new Koa() const upload = multer({ dest: 'uploads/' }) app.use(upload.any()) app.use(async (ctx) => { if (ctx.method === 'POST' && ctx.path === '/upload') { const files = ctx.request.files const fileNames = [] for (let file of files) { const fileName = `${Date.now()}-${file.originalname}` const reader = fs.createReadStream(file.path) const stream = fs.createWriteStream(path.join(__dirname, '/uploads', fileName)) reader.pipe(stream) fileNames.push(fileName) } ctx.body = `上传成功:${fileNames.join(', ')}` } }) app.listen(3000, () => { console.log('服务器已启动') })
在上面的代码中,我们使用了 any 方法来处理文件上传,并使用了 for 循环来处理多个文件上传。我们还使用了 Date.now() 函数来生成唯一的文件名。
文件下载
文件下载是指从 Web 服务器下载文件到本地计算机的过程。在 Koa2 中,可以使用 koa-send 中间件来处理文件下载。
使用 koa-send 中间件
koa-send 是一个处理文件下载的中间件,可以用于向客户端发送文件。它支持断点续传和压缩等功能。
首先,我们需要安装 koa-send:
npm install koa-send
然后,在 Koa2 应用程序中使用 koa-send 中间件:
const Koa = require('koa') const send = require('koa-send') const app = new Koa() app.use(async (ctx) => { if (ctx.method === 'GET' && ctx.path === '/download') { await send(ctx, 'uploads/file.txt') } }) app.listen(3000, () => { console.log('服务器已启动') })
现在,我们可以在 Koa2 中处理文件下载了。下面是一个示例代码:
const Koa = require('koa') const send = require('koa-send') const app = new Koa() app.use(async (ctx) => { if (ctx.method === 'GET' && ctx.path === '/download') { const fileName = 'file.txt' const filePath = path.join(__dirname, '/uploads', fileName) ctx.attachment(fileName) await send(ctx, filePath) } }) app.listen(3000, () => { console.log('服务器已启动') })
在上面的代码中,我们使用了 attachment 方法来设置文件名,并使用了 path.join 方法来获取文件路径。
总结
在 Koa2 中实现文件上传和下载非常简单,我们可以使用 koa-body、koa-multer 和 koa-send 中间件来处理文件上传和下载。通过本文的介绍和示例代码,相信读者已经掌握了 Koa2 中文件上传和下载的实现方式,可以在自己的 Web 应用程序中应用这些知识。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c1a74badd4f0e0ffba7801