前端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的mixin策略
Nov 19 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
vue中data里面的数据相互使用方式
Jun 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 高手之路(一)
2006/10/09 PHP
在PHP中执行系统外部命令
2006/10/09 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python实现计算倒数的方法
2015/07/11 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python绘制随机网络图形示例
2019/11/21 Python
python实现指定ip端口扫描方式
2019/12/17 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
五年级英语教学反思
2014/01/31 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
争先创优活动总结
2014/08/27 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
单位作风建设自查报告
2014/10/23 职场文书
工作检讨书大全
2015/01/26 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL