随着互联网的发展,越来越多的应用需要支持文件上传和下载。在 RESTful API 中,文件上传和下载的实现方式与传统应用有所不同。本文将介绍如何处理 RESTful API 中的文件上传及下载,并提供示例代码。
文件上传
前端实现
在前端,文件上传通常使用 HTML 的 input
标签实现。我们需要在 form
标签中添加 enctype
属性,指定上传的数据类型为 multipart/form-data
,并在表单中添加一个 input
标签,类型为 file
。
示例代码:
<form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="Upload"> </form>
当用户选择文件后,可以使用 JavaScript 的 FormData
对象将文件上传到服务器。同时,我们可以指定请求的方法为 POST
,并将文件对象传递给 FormData
对象。
示例代码:
-- -------------------- ---- ------- ----- ---- - ------------------------------ ----- --------- - -------------------------------------------- ------------------------------- ----- -- - ---------------------- ----- -------- - --- ---------- ----------------------- ------------------- -------------------- - ------- ------- ----- -------- ---------------- -- - --------------------- -------------- -- - -------------------- -- --
后端实现
在服务器端,处理上传文件通常需要使用第三方库。在 Node.js 中,常用的库有 multer
和 formidable
。这里以 multer
为例。
首先,我们需要创建一个 multer
实例,并指定上传的文件存储路径。在路由处理函数中使用 multer()
方法创建一个中间件。
示例代码:
const multer = require('multer') const upload = multer({ dest: 'uploads/' }) app.post('/api/upload', upload.single('file'), (request, response) => { console.log(request.file) })
这里的 upload.single('file')
表示只允许上传单个文件,并且文件字段名为 file
。最后,我们可以在路由处理函数中访问上传的文件对象。
文件下载
前端实现
在前端,可以使用 XMLHttpRequest
或 fetch
方法来下载文件。以 fetch
方法为例,我们可以设置 responseType
属性为 blob
,并在响应中使用 blob()
方法获取文件二进制数据。
示例代码:
-- -------------------- ---- ------- ------------------------------- - ------- ----- ---------------- -- - ------ --------------- ------------ -- - ----- ---- - --------------------------- --------- - ------------------------- ------------- - ---------- ------------ -------------- -- - -------------------- --
这里的 /api/download/file.pdf
表示下载文件的 API 接口,返回的是文件内容,而不是 JSON 数据。
后端实现
在服务器端,处理文件下载通常需要设置响应头。在 Node.js 中,可以使用 res.sendFile()
方法将文件发送给客户端,同时设置 Content-Disposition
响应头,指定文件名和下载方式。
示例代码:
app.get('/api/download/:filename', (request, response) => { const { filename } = request.params response.setHeader('Content-Disposition', `attachment; filename=${filename}`) response.sendFile(`${__dirname}/uploads/${filename}`) })
这里的 response.sendFile()
方法指定需要下载的文件路径,并且文件路径一定要是绝对路径。最后,我们可以在路由处理函数中访问文件内容,并通过 res
对象将文件发送给客户端。
总结
以上是处理 RESTful API 中的文件上传及下载的方法,其中前端通过 FormData 对象上传文件,后端使用 multer 库处理文件上传;前端通过 fetch 方法下载文件,后端使用 res.sendFile() 方法发送文件内容。希望本文能够对您有所启发,并为您的开发工作带来帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6481a57548841e9894120e7c