RESTful API 是一种常见的 Web API 设计风格,它使用 HTTP 协议进行通信,支持各种 HTTP 方法,包括 GET、POST、PUT、DELETE 等。在实际开发中,我们经常需要支持文件上传和下载功能,本文将介绍如何在 RESTful API 中实现这些功能。
文件上传
在 RESTful API 中,文件上传通常使用 POST 方法,并且需要使用 multipart/form-data 格式的请求体。multipart/form-data 格式是一种用于在 HTTP 请求中传输文件和表单数据的格式,它将请求体分成多个部分,每个部分包含一个字段和对应的值。例如,下面是一个包含一个文本字段和一个文件字段的 multipart/form-data 请求体:
// javascriptcn.com 代码示例 Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575 Content-Length: 381 -----------------------------974767299852498929531610575 Content-Disposition: form-data; name="text" Hello, world! -----------------------------974767299852498929531610575 Content-Disposition: form-data; name="file"; filename="example.txt" Content-Type: text/plain This is an example file. -----------------------------974767299852498929531610575--
在 Node.js 中,我们可以使用 multer 中间件来处理 multipart/form-data 请求体。multer 可以将文件保存到本地磁盘或内存中,并将文件信息添加到请求对象中。下面是一个使用 multer 处理文件上传的示例代码:
// javascriptcn.com 代码示例 const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/api/upload', upload.single('file'), (req, res) => { console.log(req.file); // { fieldname: 'file', originalname: 'example.txt', encoding: '7bit', mimetype: 'text/plain', destination: 'uploads/', filename: 'b8a7d9c9f61d7e3f3b3e7a3c3d3f7c86', path: 'uploads/b8a7d9c9f61d7e3f3b3e7a3c3d3f7c86', size: 27 } res.send('File uploaded successfully'); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
在上面的代码中,我们通过调用 multer 函数创建一个 upload 对象,然后使用 upload.single('file') 中间件来处理单个文件上传。在处理完请求后,我们可以通过 req.file 属性获取上传的文件信息。
文件下载
在 RESTful API 中,文件下载通常使用 GET 方法,并且需要将文件内容作为响应体返回。在 Node.js 中,我们可以使用 fs 模块来读取文件内容,并将其作为响应体发送给客户端。下面是一个使用 fs 模块处理文件下载的示例代码:
// javascriptcn.com 代码示例 const express = require('express'); const fs = require('fs'); const app = express(); app.get('/api/download', (req, res) => { const filePath = 'example.txt'; const fileStream = fs.createReadStream(filePath); fileStream.pipe(res); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
在上面的代码中,我们通过 fs.createReadStream 函数创建一个可读流,并将其管道连接到响应流中,从而实现文件下载。需要注意的是,我们需要设置正确的 Content-Type 和 Content-Disposition 响应头,以便浏览器能够正确地处理文件下载。例如,下面是一个设置 Content-Type 和 Content-Disposition 响应头的示例代码:
// javascriptcn.com 代码示例 const express = require('express'); const fs = require('fs'); const app = express(); app.get('/api/download', (req, res) => { const filePath = 'example.txt'; const fileStream = fs.createReadStream(filePath); res.set({ 'Content-Type': 'text/plain', 'Content-Disposition': 'attachment; filename=example.txt', }); fileStream.pipe(res); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
在上面的代码中,我们使用 res.set 方法设置 Content-Type 和 Content-Disposition 响应头。
总结
在本文中,我们介绍了在 RESTful API 中实现文件上传和下载的方法。文件上传通常使用 POST 方法和 multipart/form-data 格式的请求体,可以使用 multer 中间件来处理文件上传。文件下载通常使用 GET 方法,并将文件内容作为响应体返回,需要使用 fs 模块来读取文件内容,并设置正确的 Content-Type 和 Content-Disposition 响应头。希望本文可以帮助读者更好地理解 RESTful API 中的文件上传和下载功能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65682fbbd2f5e1655d0f6517