使用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:《接口实现文件的上传和下载》的更多相关文章

  1. Node + js实现大文件分片上传基本原理及实践(一)

    _ 阅读目录 一:什么是分片上传? 二:理解Blob对象中的slice方法对文件进行分割及其他知识点 三. 使用 spark-md5 生成 md5文件 四. 使用koa+js实现大文件分片上传实践 回 ...

  2. SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...

  3. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  4. 步步为营-70-asp.net简单练习(文件的上传和下载)

    大文件的上传一般通过FTP协议,而一般小的文件可以通过http协议来完成 1 通过asp.net 完成图片的上传 1.1 创建html页面 注意:1 method="post" ; ...

  5. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  6. 文件的上传和下载--SpringMVC

    文件的上传和下载是项目开发中最常用的功能,例如图片的上传和下载.邮件附件的上传和下载等. 接下来,将对Spring MVC环境中文件的上传和下载进行详细的讲解. 一.文件上传 多数文件上传都是通过表单 ...

  7. Javaweb之文件的上传与下载

    Javaweb之文件的上传与下载 一.基于表单的文件上传 如果在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可 ...

  8. JSP文件的上传和下载

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  9. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

随机推荐

  1. cmake错误的解决

    安装Mysql时出现:CMake Error: Error executing cmake:: LoadCache(). Aborting. 对比:/usr/bin/cmake 和 /usr/loca ...

  2. JavaScript(上)

    说说你对作用域链的理解 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的. 简单的说,作 ...

  3. 上传代码到GitHub仓库

    上传代码到GitHub仓库 准备工作 意思是自从 21 年 8 月 13 后不再支持用户名密码的方式验证了,需要创建个人访问令牌(personal access token). 这里就不多说了 Git ...

  4. python筛选excel内容并生成exe文件

    最近疫情原因,班级每天都要筛选未打卡人员,每次都手动操作太麻烦了.遂写下如下的程序,并且生成了exe可执行文件. 1. 主程序 import openpyxl import pyperclip # 1 ...

  5. Typora多线程批量上传图片,永久免费25G图床

    为了满足日常需求,就写了一个自动上传图片到图床的脚本 运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显. 以Window系统为例,操作步骤: ...

  6. 新增 Oracle 兼容函数-V8R6C4B0021

    KingbaseES V8R6C4B0021新增加以下Oracle 兼容函数. 一.bin_to_num Oracle bin_to_num 函数用于将二进制位转换成十进制的数. 1.传入参数 tes ...

  7. KingbaseES 如何把一个schema下的所有对象访问权限授权给其他用户

    用户需求:新建一个用户 B,需要能够查询A用户的所有表,并且对以后新建的表也要有select权限. 问题分析:对于现有的表可以通过动态sql批量进行授权,但是未来新建的表要如何进行授权呢? 查询了帮助 ...

  8. 《Java基础——数组的定义与使用》

    Java基础--数组的定义与使用       一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...

  9. 利用Kafka的Assign模式实现超大群组(10万+)消息推送

    引言 IM即时通信场景下,最重要的一个能力就是推送:在线的直接通过长连接网关服务转发,离线的通过APNS或者极光等系统进行推送.   本文主要是针对在线用户推送场景来进行总结和探讨:如何利用Kafka ...

  10. Django 创建 APP和目录结构介绍

    一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...