Node.js 实现存储服务的下载功能【包含前后端代码】

简介: 上传和下载功能是存储服务非常基础的功能,也是存储服务日常使用过程中最常用的功能,比如阿里云的OSS、腾讯云的COS、百度云的BOS等。当然,我们也可以自己研发私有化的对象存储服务,那么就会涉及到除了自己处理客户端逻辑外,还需要自己处理服务器的上传和下载逻辑。

问题

解决

结尾

问题

上传和下载功能是存储服务非常基础的功能,也是存储服务日常使用过程中最常用的功能,比如阿里云的OSS、腾讯云的COS、百度云的BOS等。当然,我们也可以自己研发私有化的对象存储服务,那么就会涉及到除了自己处理客户端逻辑外,还需要自己处理服务器的上传和下载逻辑。

今天的问题就是讨论如何实现自定义的下载功能,涉及前端代码和后端代码。其实,服务器的开发语言非常丰富,常见的有 Golang、Node.js、PHP 等。今天的这篇文章以 Node.js 语言为例进行说明。

解决

下载功能

基于 Node.js 在服务端实现下载功能,还是非常简单的,只是代码在精益求精方面,还有很多功课可以做。接下来,我们针对不同的实现方法进行介绍。

前端代码

前端页面调用服务器的下载接口方法也非常的多,最简单的就是用 a 标签来实现,代码参考如下:

functiondownload(href, title) {
consta=document.createElement('a');
a.setAttribute('href', href);
a.setAttribute('download', title);
a.click();
}

因为本文的重点在于介绍服务器端的处理逻辑,前端页面的下载接口调用就不过多介绍了。

后端代码

  • 方法一、

使用 download 方法实现,这种方法是最简单的,我们只需要检测到文件存在,再将文件塞到 download 接口中就行啦。

varexpress=require('express');
varfs=require("fs");
varapp=express();
app.get("/api/download", download.single('file'), Admincontroller.getdownload);
// 下载函数一exports.getdownload=function (req, res) {
varid=req.query.id;
if (id=="") {
res.json({ success: 0, "error": "参数错误" });
return;
  }
// 根据 id 拼接文件名vardes="./public/resource/";
varfileName=des+id+".mp4";
varexist=fs.existsSync(fileName);
if (exist) {
res.download(fileName);
  } else {
res.json({ success: 1, "error": "目标文件不存在" });
  }
} 
  • 方法二、

使用 createReadStream 方法,该方法相较于第一种方法,稍微复杂一些,但是好处也是非常明显的,可以支持指定下载后目标文件的名字,比如服务器上的文件名称是 a.mp4,可以将下载后的文件名称保存为 b.mp4。同时,还可以保证字符统一,避免出现下载后文件名称是乱码的情况。

// 下载函数exports.getdownload=function (req, res) {
varid=req.query.id;
if (id=="") {
res.json({ success: 0, "error": "参数错误" });
return;
    }
// 根据 id 拼接文件名vardes="./public/resource/";
varfileName=des+id+".mp4";
//增加中文处理varfilenameex=filename+".mp4"varrealName=encodeURI(filenameex,"GBK")
realName=realName.toString('iso8859-1')
res.setHeader('content-Type','application/octet-stream');
res.setHeader('content-Disposition', `attachment;filename=`+realName);
varexist=fs.existsSync(fileurl);
if (exist) {
fs.createReadStream(fileurl).pipe(res);
    } else {
res.json({
success: 0,
code: 1,
"error":"目标文件不存在",
        });
    }

结尾

基于 Node.js 实现存储服务的下载功能就介绍差不多了,昨天,我们讲了上传的问题。至此,一个存储服务的上传和下载功能就介绍完了。当然,存储服务并不单单这两个功能,比较基础的功能还有查询、删除、更新等功能,这些接口API的话,相对简单,就不过多介绍了。那么,今天的内容就这么多。大家好,我是 liuzhen007,中国邦德,中国一个会敲代码的邦德,欢迎大家关注我。



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄

目录
相关文章
|
25天前
|
JavaScript
短小精悍的js代码
【10月更文挑战第17天】
119 58
|
12天前
|
JavaScript
原生js炫酷随机抽奖中奖效果代码
原生js随机抽奖是一个炫酷的根据数据随机抽奖的代码,该网页可进行随机抽取一个数据,页面动画高科技、炫酷感觉的随机抽奖效果,简单好用,欢迎下载!
27 3
原生js炫酷随机抽奖中奖效果代码
|
8天前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
32 11
|
11天前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
20 2
|
17天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
174 4
|
18天前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
67 6
|
15天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
42 1
|
28天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
30天前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理、应用与代码演示
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理、应用与代码演示