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 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一 ...
随机推荐
- MySQL大表设计怎么做?
MySQL是一种常用的关系型数据库管理系统,它在处理大表时需要特别注意设计和优化.下面将详细介绍MySQL大表的设计原则和优化策略. 1. 数据库设计 数据库范式化:将数据按照规范的关系模型进行拆分和 ...
- 基于.NET平台常用的框架整理【藏】
来自:天使不哭 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此 ...
- HarmonyOS第一课_构建更加丰富的页面
管理组件状态 概述 组件内的状态管理:@State 从父组件单向同步状态:@Prop 与父组件双向同步状态:@Link 跨组件层级双向同步状态:@Provide 和@Consume 概述 在应用中,界 ...
- jdk21的外部函数和内存API(MemorySegment)(官方翻译)
1.jdk21: 引入一个 API,通过该 API,Java 程序可以与 Java 运行时之外的代码和数据进行互操作.通过有效地调用外部函数(即JVM外部的代码)和安全地访问外部内存(即不由JVM ...
- VCS用法
1.时钟频率点击,鼠标左键点击波形上升沿,中间滚轮点击,然后选择hz,就显示当前信号时钟频率. 2.窗口乱掉,找不到文件列表,右下角点击弹出选择instance. 3.bus地址查找,选择信号,然后蓝 ...
- 文心一言 VS 讯飞星火 VS chatgpt (156)-- 算法导论12.3 3题
三.用go语言,对于给定的 n 个数的集合,可以通过先构造包含这些数据的一棵二叉搜索树(反复使用TREE-INSERT 逐个插入这些数),然后按中序遍历输出这些数的方法,来对它们排序.这个排序算法的最 ...
- DBeaver连接国产数据库OceanBase,以及Python连接,解决ModuleNotFoundError: No module named '_jpype'
DBeaver连接OceanBase 参考:https://www.modb.pro/db/365929 用户名的格式为: 数据库用户名@租户名#集群名 Python连接OceanBase 参考:ht ...
- 谷歌浏览器输入地址后http自动转https解决方法
谷歌浏览器输入地址后http自动转https解决方法 https://blog.csdn.net/qq_51563725/article/details/133691727
- H3C 存储换盘操作
实际存储型号H3C CF8844 环境说明:H3C存储设备存在一个坏盘需要更换. 更换准备 1. 取出备件检查完毕后放置到安全场所(请严格按照<IT产品现场工程师通用服务规(维修篇)>操作 ...
- C#中对比两个对象是否相等最佳实践,IEquatable和IEqualityComparer的差异
前言 IEquatable<T> IEqualityComparer<T> 后言 参考 前言 IEquatable<T> 和 IEqualityComparer&l ...