【Vue3】下载zip文件损坏的问题
需求:
需要在vue3上实现Asp.net Web API 下载zip包的功能,本身需求很简单,但是中间遇到了问题,记录一下。
问题:
下载的zip包和后端的zip包大小不一致,后端生成的zip 61kb,下载之后变成了100kb,并且打开就提示损坏,也无法正常解压。
解决:
直接先放后端代码,对外提供接口,返回形式使用FileStreamResult,这个一般不会有问题。
后端代码实现
[HttpPost, Route("downloadalarmexcel")]
public FileStreamResult DownloadAlarmZipFile([FromBody] string mode)
{
FileStreamResult fileResult = _alarmService.DownloadAlarmZipFile(mode);
return fileResult;
}
public FileStreamResult DownloadAlarmZipFile(string fileName)
{
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "File", fileName);
if (!File.Exists(filePath))
{
throw new FileNotFoundException("找不到指定的文件", filePath);
}
var memory = new MemoryStream();
using (var stream = new FileStream(filePath, FileMode.Open))
{
stream.CopyTo(memory);
}
memory.Position = 0;
return new FileStreamResult(memory, "application/zip")
{
FileDownloadName = fileName,
EnableRangeProcessing = true // 支持断点续传
};
}
关键在于前端的文件接收,必须要在请求时加上
responseType: 'blob'
这个如果没有设置下载的文件将出现损坏的问题
// 导出excel
const handleExport = async () => {
try {
state.loading = true
const fileName = 'xxx.zip';
var AxiosRequestConfig = {
responseType: 'blob'
}
let downloadRes = await getAPI(AlarmApi).apiAlarmDownloadalarmexcelPost(fileName,AxiosRequestConfig) as any;
// 3. 处理文件下载
console.log(downloadRes);
const blob = new Blob([downloadRes.data], {
type: 'application/zip;charset=utf-8'
})
// 检查blob是否有效
if (blob.size === 0) {
throw new Error('文件内容为空')
}
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = fileName // 使用服务器返回的文件名
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
ElMessage.success('导出成功')
} catch (error) {
console.error('导出失败:', error)
ElMessage.error('导出失败')
} finally {
state.loading = false
}
};
【Vue3】下载zip文件损坏的问题的更多相关文章
- 基于Python——实现远程下载sftp文件(只下载.zip文件)
[背景]远程下载发布包等文件时,总是要使用WinSCP等工具登陆拖动.今天就介绍一种使用python下载文件到本地的方法. [代码实现] import paramiko # paramiko模块,基于 ...
- ASP.NET五步打包下载Zip文件
本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...
- flask下载zip文件报错TypeError
报错内容:TypeError: make_conditional() got an unexpected keyword argument 'accept_ranges' 报错行自己代码如下: dir ...
- Android 下载zip压缩文件并解压
网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法. 其实也很简单,就是把下载文件和解压zip文件结合到一起.下面即代码: URLConne ...
- PHP 多文件打包下载 zip
<?php $zipname = './photo.zip'; //服务器根目录下有文件夹public,其中包含三个文件img1.jpg, img2.jpg, img3.jpg,将这三个文件打包 ...
- 解决:解压zip文件却变成cpgz文件
众所周知,zip是一种压缩文件格式,MAC OS默认支持的文件格式,当时偶尔当你打开zip文件想要解压时,却自动变成了cpgz文件而没有解压,再双击这个cpgz文件,Archive Utility又会 ...
- Orchard官方文档翻译(三) 通过zip文件手动安装Orchard
原文地址:http://docs.orchardproject.net/Documentation/Manually-installing-Orchard-zip-file 想要查看文档目录请用力点击 ...
- java 生成zip文件并导出
总结一下,关于Java下载zip文件并导出的方法,浏览器导出. String downloadName = "下载文件名称.zip"; downloadName = Browser ...
- vue下载zip包到本地
<script> import axios from 'axios' export default{ methods: { downloadZip (downloadName, downl ...
- 多文件下载并打成zip文件传输到浏览器响应流
import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletResponse; import java.io.*; i ...
随机推荐
- 主动式AI(代理式)与生成式AI的关键差异与影响
大型语言模型(LLMs)如GPT可以生成文本.回答问题并协助完成许多任务.然而,它们是被动的,这意味着它们仅根据已学到的模式对接收到的输入作出响应.LLMs无法自行决策:除此之外,它们无法规划或适应变 ...
- IM技术分享:万人群聊消息投递方案的思考和实践
本文由融云技术团队原创分享,原题"技术实践丨万人群聊的消息分发控速方案",为使文章更好理解,内容有修订. 1.引言 传统意义上的IM群聊,通常都是像微信这样的500人群,或者QQ的 ...
- Solution -「COCI 2009-2010」「洛谷 P8076」RESTORAN
\(\mathscr{Description}\) Link. 给定一个含 \(n\) 个点 \(m\) 条边的简单图, 求一种边二染色方案, 使得所有 \(\deg\ge2\) 的结点都邻接 ...
- 最全Zookeeper面试题总结
1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅.负载均 ...
- Chrony:让你的服务器时间精准到微秒级的神器!
在现代计算机系统中,时间同步是至关重要的.无论是分布式系统.数据库集群,还是日志记录,时间不一致都可能导致严重的问题.而 Chrony,作为一款高性能的时间同步工具,正在成为越来越多系统管理员的首选. ...
- Ubuntu更改用户名
网上给出Ubuntu更改用户名步骤: 1.进入Ubuntu,打开一个终端,输入 sudo su转为root用户. 注意,必须先转为root用户!!! 2.gedit /etc/passwd ,找到代表 ...
- Superset 用户集成方案
注意,一下内容来自外网浏览器翻译,本人使用了将superset集成进入第三方系统,superset采用自定义身份验证+第三系统iframe嵌入方式,但是这个方式存在一个问题,iframe与redire ...
- 如何安全发布 CompletableFuture ?Java9新增方法分析
如何安全发布 CompletableFuture ?Java9新增方法分析 本文未经允许禁止转载. JDK9 中对于CompletableFuture做了新的增强,除了超时功能(orTimeout), ...
- DeepSeek,你是懂.NET的!
这两天火爆出圈的话题,除了过年,那一定是DeepSeek!你是否也被刷屏了? DeepSeek 是什么 DeepSeek是一款由国内人工智能公司研发的大型语言模型,拥有强大的自然语言处理能力,能够理解 ...
- 载誉而归!天翼云荣获第23届中国IT用户满意度大会多项殊荣
10月25日,2024第23届中国IT用户满意度大会暨首届工业产品满意度交流会在北京举行.现场揭晓"2024中国IT用户满意度征集结果",天翼云凭借领先的产品技术.完善的客户服务以 ...