前端vue+express实现文件的上传下载示例


Posted in Vue.js onFebruary 18, 2022

新建server.js

yarn init -y
yarn add express nodemon -D
var express = require("express");
const fs = require("fs");
var path = require("path");
const multer = require("multer"); //指定路径的

var app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 前端解决跨域问题
app.all("*", (req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  next();
});
// 访问静态资源
app.use(express.static(path.join(__dirname)));

// 文件上传
app.post("/upload", multer({ dest: "./public" }).any(), (req, res) => {
  const { fieldname, originalname } = req.files[0];
  // 创建一个新路径
  const name = fieldname.slice(0, fieldname.indexOf("."));
  const newName = "public/" + name + path.parse(originalname).ext;
  fs.rename(req.files[0].path, newName, function (err) {
    if (err) {
      res.send({ code: 0, msg: "上传失败", data: [] });
    } else {
      res.send({ code: 1, msg: "上传成功", data: newName });
    }
  });
});
// 文件下载
app.get('/download', function(req, res) {
  res.download('./public/test.xls');
});

// 图片下载
app.get('/download/img', function(req, res) {
  res.download('./public/2.jpg');
});

let port = 9527;
app.listen(port, () => console.log(`端口启动: http://localhost:${port}`));

(1):前端文件上传请求

第一种: form表单

<form action="http://localhost:9527/upload" method="POST" encType="multipart/form-data">
      <input type="file" name="user"/>
      <input type="submit" />
    </form>

前端vue+express实现文件的上传下载示例

第一种: input输入框

<input type="file"  @change="changeHandler($event)"/>
     changeHandler(event) {
      let files  = event.target.files[0];
      console.log("files",files)
      let data = new FormData();
      data.append(files.name,files);
      console.log("data",data)
      axios.post("http://localhost:9527/upload",data,{
        headers:{
          "Content-Type":"multipart/form-data"
        }
      }).then(res =>{
        console.log("res",res)
      })
    },

前端vue+express实现文件的上传下载示例

(2):前端文件下载

第一种: 后端返回一个下载的链接地址,前端直接使用 即可
第二种: 使用二进制流文件下载

<input type="button" value="点击下载" @click="handleDownload">
      handleDownload() {  
    axios({  
      method: 'get',  
      url: "http://localhost:9527/download",  
      data: {    
        test: "test data"  
      },  
      responseType: "arraybuffer" // arraybuffer是js中提供处理二进制的接口
    }).then(response => {          
      // 用返回二进制数据创建一个Blob实例 
      if(!response) return;
      let blob = new Blob([response.data], {            
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      }) // for .xlsx files          
      // 通过URL.createObjectURL生成文件路径          
      let url = window.URL.createObjectURL(blob) 
      console.log("url==========",url)        
      // 创建a标签          
      let ele = document.createElement("a")          
      ele.style.display = 'none'          
      // 设置href属性为文件路径,download属性可以设置文件名称          
      ele.href = url          
      ele.download = this.name          
      // 将a标签添加到页面并模拟点击          
      document.querySelectorAll("body")[0].appendChild(ele)          
      ele.click()          
      // 移除a标签          
      ele.remove()        
    });
  },

前端vue+express实现文件的上传下载示例

(3) 附加:二进制流图片的下载

// 二进制流图片文件的下载
  downLoadImg() {
     axios({
        method: 'get',
        url: `http://localhost:9527/download/img`,
        responseType: 'arraybuffer',
        params: {
          id: 12
        }
      }).then(res => {
        var src = 'data:image/jpg;base64,' + btoa(new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), ''))
       // this.srcImg = src // 图片回显
        var a = document.createElement('a')
        a.href = src
        a.download = '2.jpg'
        a.click()
        a.remove()
      })
    }

前端vue+express实现文件的上传下载示例

到此这篇关于前端vue+express实现文件的上传下载示例的文章就介绍到这了,更多相关vue express文件上传下载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue单元格多列合并的实现
Nov 26 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
vue中activated的用法
Jan 03 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
vue 实现上传组件
May 31 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
教你部署vue项目到docker
Apr 05 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 #Vue.js
vue3获取当前路由地址
Feb 18 #Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 #Vue.js
vue项目支付功能代码详解
Feb 18 #Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 #Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 #Vue.js
You might like
PHP form 表单传参明细研究
2009/07/17 PHP
php HandlerSocket的使用
2011/05/02 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
初婚初育证明
2014/01/14 职场文书
助残日活动总结
2014/08/27 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
开会通知
2015/04/20 职场文书
运动会通讯稿200字
2015/07/20 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
Golang 链表的学习和使用
2022/04/19 Golang