前端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 24 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
vue中axios封装使用的完整教程
Mar 03 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
解决vue中provide inject的响应式监听
Apr 19 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使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
Python简单进程锁代码实例
2015/04/27 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
What is view? why do we have view?
2012/06/22 面试题
留学推荐信怎么写
2014/01/25 职场文书
学习十八大报告感言
2014/02/04 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
安踏广告词改编版
2014/03/21 职场文书
档案信息化建设方案
2014/05/16 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
房产公证书样本
2015/01/23 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Python图像处理之图像拼接
2021/04/28 Python
Nginx配置之禁止指定IP访问
2022/05/02 Servers
git中cherry-pick命令的使用教程
2022/06/25 Servers