node 实现文件下载,web打开迅雷下载文件

简介: node 实现文件下载,web打开迅雷下载文件

node实现文件下载


方法一:


const express = require('express');
const router = express.Router();
const fs = require('fs');
const path = require('path');
const {errorMsg} = require("../../util/apiUtils");
router.get('/:fileName', async (req, res) => {
    const filePath = path.resolve(__dirname, `./../../public/upload/${req.params.fileName}`)
    const fileExit = exitsFile(filePath);
    if (fileExit) {
        res.download(filePath, req.params.fileName);
    } else {
        errorMsg('文件不存在');
    }
})
/**
 * 判断文件是否存在
 * @param absPath 文件的路径
 * @returns {Promise<*>}
 */
async function exitsFile(absPath) {
    const stats = await fs.statSync(absPath);
    return stats.isFile()
}
module.exports = router;


方法二


const express = require('express');
const router = express.Router();
const fs = require('fs');
const path = require('path');
const {errorMsg} = require("../../util/apiUtils");
router.get('/:fileName', async (req, res) => {
    const filePath = path.resolve(__dirname, `./../../public/upload/${req.params.fileName}`)
    const fileExit = exitsFile(filePath);
    if (fileExit) {
      fs.readFile(filePath,(err, data) => {
          res.send(data);
          res.end();
      });
    } else {
        errorMsg('文件不存在');
    }
})
/**
 * 判断文件是否存在
 * @param absPath 文件的路径
 * @returns {Promise<*>}
 */
async function exitsFile(absPath) {
    const stats = await fs.statSync(absPath);
    return stats.isFile()
}
module.exports = router;


效果:

如果是错误的文件路径如下:


20201226162505620.png


如果是正确的文件路径可以直接打开下载的弹框。


前端可以直接实现迅雷下载


原理


前提是你本地要安装了迅雷才会打开迅雷下载。


迅雷下载协议

把完整的下载地址得到

AA地址ZZ

base64编码 使用自带的方法btoa()

thunder://base64编码


完整案列如下:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <a resrole="thunder" href="/api/download/1608966035138-6mgmkl.jpg">下载</a>
    <!-- 迅雷下载协议
    把完整的下载地址得到
    AA地址ZZ
    base64编码
    thunder://base64编码
    -->
    <script>
      const a = document.querySelector("a[resrole=thunder]");
      let thunderLink = `AA${a.href}ZZ`;
      thunderLink = btoa(thunderLink);
      thunderLink = "thunder://" + thunderLink;
      a.href = thunderLink;
    </script>
  </body>
</html>


断点续传 下载的原理


关键是在于


20201226163012674.png

相关文章
|
2月前
|
数据可视化 Shell Linux
shell+crontab+gitlab实现ecs服务器文件的web展示
本文通过把ecs服务器上的文件定时上传至gitlab,实现文件的页面可视化和修改历史。技术点:shell、crontab、gitlab。
51 3
QGS
|
4月前
|
前端开发 easyexcel Java
手拉手EasyExcel实现web上传下载(全栈)
EasyExcel实现web上传下载
QGS
72 2
|
4月前
|
JSON JavaScript 数据格式
Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
|
4月前
|
JavaScript 前端开发
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
|
4月前
|
JSON JavaScript API
Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)
Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)
|
3月前
|
JavaScript API Windows
Nodejs 文件 与 路径 相关用法实例解析
Nodejs 文件 与 路径 相关用法实例解析
78 0
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
129 1
|
2月前
|
存储 数据库 Python
Django教程第6章 | web开发实战-文件上传(导入文件、上传图片)
web应用实战:导入文件解析到DB,上传图片【2月更文挑战第25天】
56 0
Django教程第6章 | web开发实战-文件上传(导入文件、上传图片)
|
2月前
|
Web App开发 JavaScript 前端开发
构建现代Web应用:Vue.js与Node.js的完美结合
在当今快速发展的Web技术领域,选择合适的技术栈对于开发高效、响应迅速的现代Web应用至关重要。本文深入探讨了Vue.js和Node.js结合使用的优势,以及如何利用这两种技术构建一个完整的前后端分离的Web应用。不同于传统的摘要,我们将通过一个实际的项目示例,展示从搭建项目架构到实现具体功能的整个过程,着重介绍了Vue.js在构建用户友好的界面方面的能力,以及Node.js在处理服务器端逻辑和数据库交互中的高效性。通过本文,读者不仅能够理解Vue.js与Node.js各自的特点,还能学习到如何将这两种技术融合应用,以提升Web应用的开发效率和用户体验。
|
3月前
|
JavaScript
nodejs统计文件/文件夹数量
nodejs统计文件/文件夹数量