前后端分离文件上传下载架构详解
在现代的Web开发中,前后端分离是一种非常流行的架构设计方式。前后端分离的架构可以使前端与后端开发人员可以独立地进行工作,提高了系统的可维护性和扩展性。在这种架构下,文件上传下载是一个非常常见的需求,下面我们就来详细介绍一下前后端分离文件上传下载的架构设计。
架构图示
journey
title 前后端分离文件上传下载架构
section 上传文件
前端->后端: 发起上传请求
后端-->前端: 返回上传凭证
前端->OSS: 上传文件
OSS-->后端: 通知上传完成
后端->数据库: 存储文件信息
section 下载文件
前端->后端: 请求下载文件
后端->OSS: 下载文件
OSS-->后端: 返回文件
后端-->前端: 返回文件给前端
状态图示
stateDiagram
[*] --> 上传请求
上传请求 --> 生成凭证: 生成上传凭证
生成凭证 --> 文件上传: 转跳到文件上传
文件上传 --> 上传完成: 上传文件完成
上传完成 --> 存储文件信息: 存储文件信息
存储文件信息 --> [*]
[*] --> 下载请求
下载请求 --> 下载文件: 下载文件
下载文件 --> 返回文件: 返回文件给前端
返回文件 --> [*]
代码示例
前端代码示例
// 发起上传请求
fetch('/api/upload', {
method: 'POST',
body: JSON.stringify({ filename: 'example.jpg' }),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
// 返回上传凭证
const { uploadToken } = data;
// 上传文件
fetch(uploadToken, {
method: 'PUT',
body: file
})
.then(() => {
// 上传完成
alert('文件上传成功');
});
});
后端代码示例
// 生成上传凭证
app.post('/api/upload', (req, res) => {
const { filename } = req.body;
const uploadToken = oss.generateUploadToken(filename);
res.json({ uploadToken });
});
// 存储文件信息
app.put('/api/upload', (req, res) => {
const { filename } = req.body;
// 存储文件信息到数据库
database.saveFile({ filename });
res.send('文件上传成功');
});
总结
通过以上的介绍,我们可以看到前后端分离文件上传下载的架构设计流程。前端发起上传请求,后端生成上传凭证并返回给前端,前端再将文件上传到OSS,上传完成后通知后端存储文件信息。下载文件时,前端请求后端下载文件,后端通过OSS下载文件并返回给前端。这种架构设计使得前后端各自负责不同的工作,提高了系统的可扩展性和可维护性,是一种非常值得推广的设计思想。