vue+spingboot 实现服务器端文件下载功能
vue3 和springboot配合如何实现服务器端文件的下载。
先看springboot的后台代码:
@PostMapping("/download")
@ResponseBody
public void downloadWord(HttpServletResponse response, HttpServletRequest request,@Valid String filePath) {
try {
//获取文件的路径filePath是服务器端存放文件的完整地址
File file = ResourceUtils.getFile(filePath);
//文件后缀名
String suffex = filePath.split("\\.")[1];
// 读到流中
InputStream inStream = new FileInputStream(file);//文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
//文件名中午乱码的问题没有解决所以,文件名后端都叫1.XXX,最后文件名由前端重新修改
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("1."+suffex, "UTF-8"));
// 循环取出流中的数据
byte[] b = new byte[200];
int len;
while ((len = inStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
vue端:
网络请求使用axios ,文件下载使用file-saver
npm install file-saver --save
bower install file-saver
注:axios参照vue axiox网络请求 ,如下代码不在同一个文件内,根据需求自行规划
import axios from "axios"; // 引用axios
import qs from 'qs'; const instance = axios.create({
baseURL: config.baseUrl.dev,
timeout: 60000,
responseType: 'blob', //这里是关键
withCredentials: true,
crossDomain: true,
transformRequest: [function(data) {
data = qs.stringify(data);
return data;
}],
headers: {
'apiVersion': 'v1',
}
}); export function postBlob(url, data = {}) {
return new Promise((resolve, reject) => {
instance.post(url, data)
.then((response) => {
resolve(response);
})
.catch((err) => {
reject(err);
});
});
} //资源下载的接口定义
export const resourceDownload = (params) => postBlob("/zy/download", params); //资源下载的方法
downLoadfunction(index) {
//获得资源的名称
let fileName = this.getFileName(this.data1[index].resourcesPath);
//指定资源在服务期端的路径
let paramter = {
filePath: this.data1[index].resourcesPath
};
resourceDownload(paramter).then(res => {
var FileSaver = require('file-saver');
var blob = new Blob([res.data], {
type: "text/plain;charset=utf-8"
});
FileSaver.saveAs(blob, fileName)
})
.catch(error => {});
}, //获取文件名
getFileName(url) {
let name = "";
if (url !== null && url !== "") {
name = url.substring(url.lastIndexOf("/") + 1);
} else {
name = "无";
}
return name;
},
vue+spingboot 实现服务器端文件下载功能的更多相关文章
- JAVA文件下载功能问题解决日志
今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...
- 解决springmvc中文件下载功能中使用javax.servlet.ServletOutputStream out = response.getOutputStream();后运行出异常但结果正确的问题
问题描述: 在springmvc中实现文件下载功能一般都会使用javax.servlet.ServletOutputStream out = response.getOutputStream();封装 ...
- WebView实现文件下载功能
WebView控制调用相应的WEB页面进行展示.安卓源码当碰到页面有下载链接的时候,点击上去是一点反应都没有的.原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置W ...
- Vue (二) --- Vue对象提供的属性功能
--------------------------------------------不是井里没有水,而是你挖的不够深. 3. Vue对象提供的属性功能 3.1 过滤器 过滤器,就是vue允许开发者 ...
- vue 对象提供的属性功能、通过axio请求数据(2)
1 Vue对象提供的属性功能 1.1 过滤器 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 1.1.1 使用Vue.filter()进行全局定义(全局 ...
- Spring Boot实现文件下载功能
我们只需要创建一个控制器(Controler)文件,即Controller目录下的File_Download.java,其完整目录如下: @Controller public class File_D ...
- Spring Boot入门(11)实现文件下载功能
在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能. 还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会. 本次建立的Spring Boot项目的主要功能 ...
- vue教程2-07 微博评论功能
vue教程2-07 微博评论功能 <!doctype html> <html> <head> <meta charset="utf-8"& ...
- ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码
以前做asp.net下载功能的时候都是采用:<a href="http://www.wang0214.com/wgcms">下载</a>的方式来实现下载. ...
- java web文件下载功能实现 (转)
http://blog.csdn.net/longshengguoji/article/details/39433307 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一 ...
随机推荐
- 数据分析人员需要掌握sql到什么程度?
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准化语言,对于数据分析人员来说,掌握SQL是至关重要的. 在本文中,我们将详细探讨数据分析人员需要掌握SQL ...
- Excel表格数据可视化的六大常见方式,看看你都会吗?
当涉及到Excel表格数据的可视化,有许多不同的方式可以展示和呈现数据.以下是六种常见的Excel表格数据可视化方式的详细介绍. 1. 条形图(Bar Chart) 条形图是一种常见的数据可视化图表类 ...
- Guava Preconditions类的各种用法
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. Guava Preconditions类 提供静态方法列表,用于检查是否使用有效参数值调用方法或构造函数.如果前提条件失败 ...
- 利用Jdk动态代理模拟MyBatis的Mapper功能
本文将先介绍jdk动态代理的基本用法,并对其原理和注意事项予以说明.之后将以两个最常见的应用场景为例,进行代码实操.这两个应用场景分别是拦截器和声明性接口,它们在许多开发框架中广泛使用.比如在spri ...
- RocksDB 在 vivo 消息推送系统中的实践
作者:vivo 互联网服务器团队 - Zeng Luobin 本文主要介绍了 RocksDB 的基础原理,并阐述了 RocksDB 在vivo消息推送系统中的一些实践,通过分享一些对 RocksDB ...
- IP的电源管脚
IP的电源管脚是个特殊的存在. 1.对于前度RTL集成,需要和IP vendor以及后端确认,集成与综合时是否需要将电源DVDD,AVDD,引出到top层. 2.绝大部分情况下IP的电源PIN是sup ...
- [ABC313F] Flip Machines
Problem Statement There are $N$ cards numbered $1$ through $N$. Each face of a card has an integer w ...
- [ABC261F] Sorting Color Balls
Problem Statement There are $N$ balls arranged from left to right. The color of the $i$-th ball from ...
- [ABC262D] I Hate Non-integer Number
Problem Statement You are given a sequence of positive integers $A=(a_1,\ldots,a_N)$ of length $N$. ...
- 微信模板消息 PHP
微信SDK: <?php class Oauth { //获得全局access_token public function get_token(){ //如果已经存在直接返回access_tok ...