需求:

需要在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文件损坏的问题的更多相关文章

  1. 基于Python——实现远程下载sftp文件(只下载.zip文件)

    [背景]远程下载发布包等文件时,总是要使用WinSCP等工具登陆拖动.今天就介绍一种使用python下载文件到本地的方法. [代码实现] import paramiko # paramiko模块,基于 ...

  2. ASP.NET五步打包下载Zip文件

    本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...

  3. flask下载zip文件报错TypeError

    报错内容:TypeError: make_conditional() got an unexpected keyword argument 'accept_ranges' 报错行自己代码如下: dir ...

  4. Android 下载zip压缩文件并解压

    网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法. 其实也很简单,就是把下载文件和解压zip文件结合到一起.下面即代码: URLConne ...

  5. PHP 多文件打包下载 zip

    <?php $zipname = './photo.zip'; //服务器根目录下有文件夹public,其中包含三个文件img1.jpg, img2.jpg, img3.jpg,将这三个文件打包 ...

  6. 解决:解压zip文件却变成cpgz文件

    众所周知,zip是一种压缩文件格式,MAC OS默认支持的文件格式,当时偶尔当你打开zip文件想要解压时,却自动变成了cpgz文件而没有解压,再双击这个cpgz文件,Archive Utility又会 ...

  7. Orchard官方文档翻译(三) 通过zip文件手动安装Orchard

    原文地址:http://docs.orchardproject.net/Documentation/Manually-installing-Orchard-zip-file 想要查看文档目录请用力点击 ...

  8. java 生成zip文件并导出

    总结一下,关于Java下载zip文件并导出的方法,浏览器导出. String downloadName = "下载文件名称.zip"; downloadName = Browser ...

  9. vue下载zip包到本地

    <script> import axios from 'axios' export default{ methods: { downloadZip (downloadName, downl ...

  10. 多文件下载并打成zip文件传输到浏览器响应流

    import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletResponse; import java.io.*; i ...

随机推荐

  1. 主动式AI(代理式)与生成式AI的关键差异与影响

    大型语言模型(LLMs)如GPT可以生成文本.回答问题并协助完成许多任务.然而,它们是被动的,这意味着它们仅根据已学到的模式对接收到的输入作出响应.LLMs无法自行决策:除此之外,它们无法规划或适应变 ...

  2. IM技术分享:万人群聊消息投递方案的思考和实践

    本文由融云技术团队原创分享,原题"技术实践丨万人群聊的消息分发控速方案",为使文章更好理解,内容有修订. 1.引言 传统意义上的IM群聊,通常都是像微信这样的500人群,或者QQ的 ...

  3. Solution -「COCI 2009-2010」「洛谷 P8076」RESTORAN

    \(\mathscr{Description}\)   Link.   给定一个含 \(n\) 个点 \(m\) 条边的简单图, 求一种边二染色方案, 使得所有 \(\deg\ge2\) 的结点都邻接 ...

  4. 最全Zookeeper面试题总结

    1. ZooKeeper 是什么? ZooKeeper 是一个开源的分布式协调服务.它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅.负载均 ...

  5. Chrony:让你的服务器时间精准到微秒级的神器!

    在现代计算机系统中,时间同步是至关重要的.无论是分布式系统.数据库集群,还是日志记录,时间不一致都可能导致严重的问题.而 Chrony,作为一款高性能的时间同步工具,正在成为越来越多系统管理员的首选. ...

  6. Ubuntu更改用户名

    网上给出Ubuntu更改用户名步骤: 1.进入Ubuntu,打开一个终端,输入 sudo su转为root用户. 注意,必须先转为root用户!!! 2.gedit /etc/passwd ,找到代表 ...

  7. Superset 用户集成方案

    注意,一下内容来自外网浏览器翻译,本人使用了将superset集成进入第三方系统,superset采用自定义身份验证+第三系统iframe嵌入方式,但是这个方式存在一个问题,iframe与redire ...

  8. 如何安全发布 CompletableFuture ?Java9新增方法分析

    如何安全发布 CompletableFuture ?Java9新增方法分析 本文未经允许禁止转载. JDK9 中对于CompletableFuture做了新的增强,除了超时功能(orTimeout), ...

  9. DeepSeek,你是懂.NET的!

    这两天火爆出圈的话题,除了过年,那一定是DeepSeek!你是否也被刷屏了? DeepSeek 是什么 DeepSeek是一款由国内人工智能公司研发的大型语言模型,拥有强大的自然语言处理能力,能够理解 ...

  10. 载誉而归!天翼云荣获第23届中国IT用户满意度大会多项殊荣

    10月25日,2024第23届中国IT用户满意度大会暨首届工业产品满意度交流会在北京举行.现场揭晓"2024中国IT用户满意度征集结果",天翼云凭借领先的产品技术.完善的客户服务以 ...