当前位置: 首页 > wzjs >正文

单位网站备案流程wordpress隐私页

单位网站备案流程,wordpress隐私页,前端培训,网站发展趋势和前景前言 在上一篇文章 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 中,我们演示了如何将用户的 Mysql 数据库进行备份的代码。但是,这个备份,只是备份在了服务器上了。 而我们用户的真实需求,是需要将备份文件下载到本地进行…

前言

在上一篇文章 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 中,我们演示了如何将用户的 Mysql 数据库进行备份的代码。但是,这个备份,只是备份在了服务器上了。

而我们用户的真实需求,是需要将备份文件下载到本地进行保存,于是,这里就需要一个将文件返回给客户端下载的需求。

绝对不能采用的方案

我脑袋里有一个小机灵鬼告诉我,可以这样搞,代码如下:

import * as path from 'node:path'
import * as Koa from 'koa'
import * as koaStatic from 'koa-static'const app = new Koa()
app.use(koaStatic(path.resolve(process.cwd(), './backups')))
app.listen(3000, () => {console.log(`Server running on http://localhost:3000`)
})

这是绝对不可以的。因为这样就等于所有人都可以访问我们的数据库备份文件。

不过上面的代码依然有参考价值,就是配置静态文件以供访问,比如图片资源啥的。

读取备份文件,并返回一个列表

不扯淡,我们需要把数据库备份文件形成一个列表,提供给用户,然后用户根据实际需求,对所需要的备份文件进行下载。

用户鉴权和接口代码这里不展示了。这里只展示核心的读取文件,并形成列表的功能

import * as fs from 'node:fs/promises'const listBackupData = async (ctx: Context, backDir: string) => {try {const files = await fs.readdir(backDir)const backupFiles = await Promise.all(files.filter((file) => file.endsWith('.sql')).map(async (file) => {const filePath = path.join(backDir, file)const stats = await fs.stat(filePath)return {fileName: file,fileSize: stats.size,fileCreateTime: stats.birthtime,}}),)const list = backupFiles.sort((a, b) => new Date(b.fileCreateTime).getTime() - new Date(a.fileCreateTime).getTime())ctx.body = succ(list)} catch (error) {ctx.status = 500ctx.body = fail('获取备份列表失败', 500)}
}

好,通过这样一段代码,就可以实现读取数据库备份文件中的文件,并形成一个列表返回给客户端了。测试效果如下图所示

读取列表测试结果

读取文件,并提供给客户端进行下载

根据上面的列表接口,用户就可以获知数据库备份文件的文件名了。再利用文件名,我们写一个接口,提供给用户进行下载即可

用户鉴权和接口代码这里不展示了。这里只展示核心函数的代码

import * as fs from 'node:fs/promises'const downloadBackupData = async (ctx: Context, backDir: string, fileName: string) => {try {const filePath = path.join(backDir, fileName)const fileExists = await fs.access(filePath).then(() => true).catch(() => false)if (!fileExists) {ctx.status = 404ctx.body = fail('备份文件不存在', 404)return}const stats = await fs.stat(filePath)const fileContent = await fs.readFile(filePath)ctx.set({'Content-Type': 'application/sql','Content-Disposition': `attachment; filename=${encodeURIComponent(fileName)}`,'Content-Length': stats.size.toString(),})ctx.body = fileContent} catch (error) {ctx.status = 500ctx.body = fail('下载备份文件失败', 500)}
}

好的,我们可以看到,其实重点是 fs 库的相关使用,我们用它读取文件夹,读取文件,读取文件的信息等等。

实现下载的关键是设置返回头,通过设置返回头告诉客户端,这不是一个普通接口,而是一个文件下载。

最终效果如下:

下载效果演示

数据库备份文件删除功能的演示

OK,如果用户不停的备份数据库的话,在服务器上会形成很多备份文件,对硬盘资源形成浪费。

为避免用户硬盘占满了找我删除,于是,我决定给用户开发一个删除备份文件的接口,核心代码如下:

const deleteBackupData = async (ctx: Context, backDir: string, fileName: string) => {try {const filePath = path.join(backDir, fileName)const fileExists = await fs.access(filePath).then(() => true).catch(() => false)if (!fileExists) {ctx.status = 404ctx.body = fail('备份文件不存在', 404)}// 删除文件await fs.unlink(filePath)ctx.body = succ('删除备份文件成功')} catch (error) {ctx.status = 500ctx.body = fail('删除备份文件失败', 500)}
}

执行效果如下图所示:

删除效果演示

小结

我们日常开发中,更多的是对数据库进行 CRUD 的操作,对于文件的操作我们生疏一些。通过这个接口一系列功能的开发,让我对 NodeJS 的文件操作有了更多的认知。

如果本文对您有所增益,辛苦看官您用发财的小手点个赞吧!

http://www.dtcms.com/wzjs/790535.html

相关文章:

  • 哪些网站专门做细胞的山东网站建设xywlcn
  • 品网站建设公司排名企业网站建设知乎
  • 网站建设晋icp备龙岩房产网
  • 做网站的劣势安徽集团网站建设
  • 新乡建设公司网站阳江公司网站建设
  • 网站的统计代码莱芜都市网房产频道
  • 如何给网站做右侧悬浮电话襄阳百度seo
  • 做网站时候如果添加微信代码wordpress 悬浮音乐
  • 上海公司网站建设多少钱泉州营销型网站设计
  • 用百度云服务器做网站网站设计用ps 怎么做
  • 网站引流推广怎么做百度关键词搜索推广
  • 汽配公司的网站要怎么做郑州整形网站建设
  • 重庆市渝兴建设投资有限公司网站php7.1 WordPress
  • 做自媒体可以参考的外国网站减肥产品网站模板
  • 网站错误模板公司seo
  • 攀枝花建设工程有限责任公司网站免费网站托管
  • 医院网站建设招标说明建网站要多少钱一个
  • 服务器网站绑定域名wordpress 插件 翻译
  • 杭州画廊网站建设wordpress首页文章插件
  • 视频分享网站怎么做的WordPress使用typecho主题
  • 网站做系统叫什么名字吗网站多国语言设计
  • 网站公司怎么做推广方案辽宁省和城乡建设厅网站
  • 网站建设350元华为官网商城
  • 网站建设大赛海报网站怎么做配置文件夹
  • 林业网站源码北京装修大概多少钱一平方
  • 杰商网西安网站建设分销平台软件
  • 做的好的旅游网站如何提高网站的知名度
  • 织梦wordpress百度seo关键词报价
  • 图片网站怎么做优化西安网站建设开发公司
  • 给别人做网站挣钱吗做百度推广得用网站是吗