springboot+vue实现文件上传下载


Posted in Vue.js onNovember 17, 2020

本文实例为大家分享了springboot+vue实现文件上传下载的具体代码,供大家参考,具体内容如下

一、文件上传(基于axios的简单上传)

所使用的技术:axios、springboot、vue;
实现思路:通过h5 :input元素标签进行选择文件,获取所选选择的文件路径,new fromdata对象,设置fromdata的参数,设置axios对应的请求头,最后通过axios发送post请求后端服务。后端服务同过MultipartFile进行文件接收。具体代码如下:

前端代码:

1、创建vue对象

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import http from 'axios'
Vue.config.productionTip = false;
Vue.prototype.$http=http;
window.vm=new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')

2、实现上传组件

在input标签中添加改变事件监听,当发生改变时调用up方法。

<template>
 <div class="hello">
 <input
  class="file"
  name="file"
  type="file"
  accept="image/png, image/gif, image/jpeg"
  @change="up" 
 />
 </div>
</template>

<script>

export default {
 name: "HelloWorld",
 props: {
 msg: String
 },
 methods: {
 up(e) {
  let file = e.target.files[0];
  alert(file.name);
  console.log(file);
  let param = new FormData(); //创建form对象
  param.append("file", file); //通过append向form对象添加数据
  console.log(param.get("file")); //FormData私有类对象,访问不到,可以通过get判断值是否传进去
  let config = {
  headers: { "Content-Type": "multipart/form-data" }
  }; //添加请求头
  this.$http
  .post("http://127.0.0.1:8081/data/up", param, config)
  .then(response => {
   console.log(response.data);
  }).catch(
   error=>{
   alert("失败");
   }
  );
 }
 }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">

</style>

后端代码:

上传文件代码

@RequestMapping(value = "/up", method = RequestMethod.POST)
 @ResponseBody
 public Result<String> uploade(@RequestParam("file") MultipartFile file) {
  try {
   log.error("开始上传!!!");
   String originalFilename = file.getOriginalFilename();
   InputStream inputStream = file.getInputStream();
   String path="d:/2020test/";
   File file1 = new File(path + originalFilename);
   if(!file1.getParentFile().exists()){
    file1.getParentFile().mkdirs();
   }
   file.transferTo(file1);
   log.info("上传成功!");
  } catch (IOException e) {
   e.printStackTrace();
  }
  Result<String> stringResult = new Result<String>();
  stringResult.setMsg("sue");
  stringResult.setData("file");
  return stringResult;
 }

二、文件下载

通过response输出流返回文件内容,核心代码设置下载文件的名字(res.setHeader(“Content-Disposition”, “attachment;filename=” + java.net.URLEncoder.encode(realFileName.trim(), “UTF-8”));)

@RequestMapping(value = "/get", method = RequestMethod.GET)
 public void downloadFile(HttpServletResponse res) {
  String realFileName="C:/Users/xiongyi/Desktop/12.xls";
  File excelFile = new File(realFileName);
  res.setCharacterEncoding("UTF-8");
  res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
  res.setContentType("application/octet-stream;charset=UTF-8");
  //加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
//  res.addHeader("Content-Length", String.valueOf(excelFile.length()));
  try {
   res.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(realFileName.trim(), "UTF-8"));
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  }
  byte[] buff = new byte[1024];
  BufferedInputStream bis = null;
  OutputStream os = null;
  try {
   os = res.getOutputStream();
   bis = new BufferedInputStream(new FileInputStream(new File(realFileName)));
   int i = bis.read(buff);
   while (i != -1) {
    os.write(buff, 0, buff.length);
    os.flush();
    i = bis.read(buff);
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (bis != null) {
    try {
     bis.close();
    } catch (IOException e) {
    }
   }
  }
  Result<String> stringResult = new Result<String>();
  stringResult.setMsg("sue");
  stringResult.setData("nimabi");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
vue 组件基础知识总结
Jan 26 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 #Vue.js
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 #Vue.js
Vue项目利用axios请求接口下载excel
Nov 17 #Vue.js
vue实现下载文件流完整前后端代码
Nov 17 #Vue.js
vue+iview实现文件上传
Nov 17 #Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 #Vue.js
vue+iview实现分页及查询功能
Nov 17 #Vue.js
You might like
PHP 全角转半角实现代码
2010/05/16 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
php四种定界符详解
2017/02/16 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
什么是抽象
2015/12/13 面试题
介绍一些UNIX常用简单命令
2014/11/11 面试题
应届生污水处理求职信
2013/11/06 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
活动总结书
2014/05/08 职场文书
党员承诺践诺书
2014/05/20 职场文书
企业管理标语
2014/06/10 职场文书
单位授权委托书范本
2014/09/26 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Android 中的类文件和类加载器详情
2022/06/05 Java/Android