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+vant实现购物车全选和反选功能
Nov 17 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
vue-cli4.5.x快速搭建项目
May 30 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue3种table表格选项个数的控制方法
Apr 14 Vue.js
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
JS hashMap实例详解
2016/05/26 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
Python设计模式之工厂模式简单示例
2018/01/09 Python
快速了解Python相对导入
2018/01/12 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
学生保证书范文
2014/04/28 职场文书
优秀员工推荐信
2014/05/10 职场文书
活动总结新闻稿
2014/08/30 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
优秀班集体申报材料
2014/12/25 职场文书
个人党性分析总结
2015/03/05 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL