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

目录
打赏
0
0
0
0
15
分享
相关文章
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
43 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
72 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
58 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
Node.js 中实现多任务下载的并发控制策略
Node.js 中实现多任务下载的并发控制策略
使用 Node.js 和 Express 构建 Web 应用
【10月更文挑战第2天】使用 Node.js 和 Express 构建 Web 应用
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
81 4

热门文章

最新文章