node.js:《接口实现文件的上传和下载》
使用node.js写上传文件和下载文件的接口
上传接口:
开始写接口前,我们先安装一个上传文件的插件:npm install multer
安装成功在package.json或package-lock.json包中能看到
在主文件引入模块:
//配置文件上传临时目录
const upload = multer({
dest:'./public/upload/temp'//临时存放路径
})
配置所有接口可下载
//设置所有接口都允许上传功能
uploadFile.use(upload.any())
然后在路由中引入fs模块,写一个上传功能的接口
const fs = require("fs");//重新定义文件模块
router.post('/upload', (req, res) => {
//检查是否有文件
if (!req.files) {//如果req是空 返回400
res.send({
code: 400,
msg: '上传文件不能为空',
});
return;
}
//保存文件
let files = req.files; //将获取的文件放到files
let ret_files = []; //定义一个空数组
for (let file of files) {//将files循环成单个
//获取名字后缀
let file_ext = file.originalname.substring(file.originalname.lastIndexOf('.') + 1);
//将文件名改为时间戳
let file_name = new Date().getTime() + '.' + file_ext
//移动文件并且修改文件名字
fs.renameSync(
process.cwd() + "/public/upload/temp/" + file.filename,//file.filename:文件最初名字 /public/upload/temp/作为中转站
process.cwd() + "/public/upload/" + file_name, //file_name:时间戳新起的名字
);
//将改完的文件写进空数组
ret_files.push("./public/upload/" + file_name)
}
res.send({
code: 200,
msg: 'OK',
data: ret_files //返回data给前端预览
})
})
测试:
在“/public/upload/”下可以看到一个已经有一个以时间戳命名的文件了
下载接口:
//下载接口
router.get('/download',async(req,res)=>{
let file_name = req.query.file_name;
let file_path = process.cwd()+'/public/upload/'+file_name;
res.download(file_path);
})
完整代码:
uploadFile.js
const express = require('express')//引入模块
const uploadFile = express()//实例化
const multer = require('multer')//引入实例化上传文件模块
const port = 8080 //端口
//配置文件上传临时目录
const upload = multer({
dest:'./public/upload/temp'//临时存放路径
})
//设置所有接口都允许上传功能
uploadFile.use(upload.any())
//引入路由--接入其他接口
uploadFile.use('/route',require("./router/fileRouter"))//通过路由的方式将上传和下载接口引入
//监听
uploadFile.listen(port, () => {
//监听成功打印以下语句
console.log(`Example app listening on port ${port}`)
})
fileRouter.js:
const express = require("express");
const fs = require("fs");
var router = express.Router();
//post请求 写个接口测试一下路由会不会报错
// router.post('/test',function(req,res){
// // res.send(req.body)
// res.send('ok')
// })
//写上传接口
router.post('/upload', (req, res) => {
//检查是否有文件
if (!req.files) {//如果req是空 返回400
res.send({
code: 400,
msg: '上传文件不能为空',
});
return;
}
//保存文件
let files = req.files; //将获取的文件放到files
let ret_files = []; //定义一个空数组
for (let file of files) {//将files循环成单个
//获取名字后缀
let file_ext = file.originalname.substring(file.originalname.lastIndexOf('.') + 1);
//将文件名改为时间戳
let file_name = new Date().getTime() + '.' + file_ext
//移动文件并且修改文件名字
fs.renameSync(
process.cwd() + "/public/upload/temp/" + file.filename,//file.filename:文件最初名字
process.cwd() + "/public/upload/" + file_name, //file_name:时间戳新起的名字
);
//将改完的文件写进空数组
ret_files.push("./public/upload/" + file_name)
}
res.send({
code: 200,
msg: 'OK',
data: ret_files //返回data给前端预览
})
})
//下载接口
router.get('/download',async(req,res)=>{
let file_name = req.query.file_name;
let file_path = process.cwd()+'/public/upload/'+file_name;
res.download(file_path);
})
//3、把它加到模块上
module.exports = router;
喜欢文章或文章内容有帮助的话留下足迹鼓励一下博主吧~
node.js:《接口实现文件的上传和下载》的更多相关文章
- Node + js实现大文件分片上传基本原理及实践(一)
_ 阅读目录 一:什么是分片上传? 二:理解Blob对象中的slice方法对文件进行分割及其他知识点 三. 使用 spark-md5 生成 md5文件 四. 使用koa+js实现大文件分片上传实践 回 ...
- SpringMVC+Ajax实现文件批量上传和下载功能实例代码
需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...
- java web(四):request、response一些用法和文件的上传和下载
上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...
- 步步为营-70-asp.net简单练习(文件的上传和下载)
大文件的上传一般通过FTP协议,而一般小的文件可以通过http协议来完成 1 通过asp.net 完成图片的上传 1.1 创建html页面 注意:1 method="post" ; ...
- Spring MVC 实现文件的上传和下载
前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...
- 文件的上传和下载--SpringMVC
文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...
- Javaweb之文件的上传与下载
Javaweb之文件的上传与下载 一.基于表单的文件上传 如果在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可 ...
- JSP文件的上传和下载
文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...
- java实现ftp文件的上传与下载
最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...
随机推荐
- cmake错误的解决
安装Mysql时出现:CMake Error: Error executing cmake:: LoadCache(). Aborting. 对比:/usr/bin/cmake 和 /usr/loca ...
- JavaScript(上)
说说你对作用域链的理解 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的. 简单的说,作 ...
- 上传代码到GitHub仓库
上传代码到GitHub仓库 准备工作 意思是自从 21 年 8 月 13 后不再支持用户名密码的方式验证了,需要创建个人访问令牌(personal access token). 这里就不多说了 Git ...
- python筛选excel内容并生成exe文件
最近疫情原因,班级每天都要筛选未打卡人员,每次都手动操作太麻烦了.遂写下如下的程序,并且生成了exe可执行文件. 1. 主程序 import openpyxl import pyperclip # 1 ...
- Typora多线程批量上传图片,永久免费25G图床
为了满足日常需求,就写了一个自动上传图片到图床的脚本 运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显. 以Window系统为例,操作步骤: ...
- 新增 Oracle 兼容函数-V8R6C4B0021
KingbaseES V8R6C4B0021新增加以下Oracle 兼容函数. 一.bin_to_num Oracle bin_to_num 函数用于将二进制位转换成十进制的数. 1.传入参数 tes ...
- KingbaseES 如何把一个schema下的所有对象访问权限授权给其他用户
用户需求:新建一个用户 B,需要能够查询A用户的所有表,并且对以后新建的表也要有select权限. 问题分析:对于现有的表可以通过动态sql批量进行授权,但是未来新建的表要如何进行授权呢? 查询了帮助 ...
- 《Java基础——数组的定义与使用》
Java基础--数组的定义与使用 一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...
- 利用Kafka的Assign模式实现超大群组(10万+)消息推送
引言 IM即时通信场景下,最重要的一个能力就是推送:在线的直接通过长连接网关服务转发,离线的通过APNS或者极光等系统进行推送. 本文主要是针对在线用户推送场景来进行总结和探讨:如何利用Kafka ...
- Django 创建 APP和目录结构介绍
一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...