c#后端返回文件的二进制数据,前端直接生成blob对象创建的文件是错误的!

本文只是记录实现过程中,所遇到的问题,等下次再遇到时,能够轻松解决。
这是后端的返回结果,文件的二进制数组在data里。

刚开始我的js代码是这样写的

 let url = window.URL.createObjectURL(new Blob([res.data], {
                            type: "application/vnd.ms-excel"
                        }));
                        result += "," + "<a download='错误信息.xlsx' href='"+url+"'>点击可下载错误信息</a>"
                        }

结果下载的文件内容是我返回的二进制。
后面搜寻了多方资料,找到了原因。我返回的二进制数组他的类型被js认为是array,而创建blob对象的函数,只接受ArrayBuffer,ArrayBufferView,Blob类型的数据,所以我们只需要将返回的array转换成相应的类型就可以了。下面是我更改后的代码

                        var uInt8Array = new Uint8Array(res.data);
                        let url = window.URL.createObjectURL(new Blob([uInt8Array], {
                            type: "application/vnd.ms-excel"
                        }));
                        result += "," + "<a download='错误信息.xlsx' href='"+url+"'>点击可下载错误信息</a>"

原文地址:https://www.cnblogs.com/qwfy-y/p/12321839.html

时间: 2024-10-11 13:39:19

c#后端返回文件的二进制数据,前端直接生成blob对象创建的文件是错误的!的相关文章

WebSocket api与服务器返回的数据类型判断(文件、二进制数据)

一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起. 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果.HTTP 协议做不到服务器主动向客户端推送信息. 这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦.我们只能使用"轮询":每隔一段时候,就发出一个

MyBatis 逆向工程——根据数据表自动生成model、xml映射文件、mapper接口

MyBatis Generator(MBG)的使用 MBG可以根据数据表生成对应的model.xml映射文件.mapper接口,只是简单的生成,还需要根据需求修改. 1.下载jar包 https://github.com/mybatis/generator/releases 解压后有3个jar包,只使用一个: 2.新建一个新的java项目,导入mybatis.jar.mybatis-generator-core.jar.数据库驱动. 3.src下新建config.xml http://mybat

为什么同样的数据,俩人生成的obj和bin文件不一样

http://bbs.csdn.net/topics/270055083 编译器编译的时候可能有些东西依赖时间,或许是优化的原因,如果可以,换个编译器试试,或许两次编译的时候,强制把系统时间调成一个看看 当然不同,elf是编译结果,bin是链接后的文件,当然,里面可以找到相同点.比如,同一函数在两个文件中的头.尾是相同的,长度也是一致的.

Mybatis根据数据库中的表自动生成Bean对象与Mapper文件 (小白式教程)

示例IDE采用 IDEA //**********************华丽的分割线****************// 1.新建一个java项目-->在Src目录下创建3个包(Package)与一个文件夹(Directory) Package(包)- ①bean:存放自动生成的Java Bean ②mapper:存放自动生成的mapper接口与对应的.xml文件 ③test:存放一个main方法用于执行自动生成操作 Directory(目录):: lib:存放项目所需要导入的包 2.向lib

BLOB存储图片文件二进制数据是非对错

子在一天一天虚度,生活也在一天一天中茫然 做人做事哪能尽如人意,付出多少收获多少虽然存在偏颇,但是不劳而获的心态是万万不对的,更不能去怨天尤人,低调为人.做好自己就可以了 改进你的系统的最好的方法是先避免做“蠢事”.我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含的牵连,认识不到这样做对 系统维护尤其是系统升级带来多大的麻烦.作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的决定的人有过好的结果的. 图片,文件,二进制数据 既然数据库支持 BLOB 类型的

python 文件处理、数据持久化与正则

一.文件的处理 数据持久化最简单的类型就是普通文件,有时也叫做平面文件(flat file).文件是计算机中由OS(操作系统)管理的具有名字的存储区域,在linux系统上,文件被看作是字节序列. fileobj=open(filename, mode,buffering=-1,...)    打开文件 fileobj是open()函数返回的文件对象 filename需要打开的文件的字符串名 buffering:是否使用缓存,0表示输出无缓存,1表示使用缓存: 负数表示使用默认设置,正数表示使用近

背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数据 读写二进制数据 读写流数据 示例1.演示如何读写文本数据FileSystem/ReadWriteText.xaml <Page x:Class="Windows10.FileSystem.ReadWriteText" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x

JavaScript二进制数据序列化和反序列化

最近业余时间在搞h5小游戏,由于同步协议过于频繁,和服务器之间的同步直接用json就显得太浪费了,于是我们商讨之下决定改用二进制.学习过程中并没有遇到一篇就解决问题的文章,遂再总结一发. 1.二进制数据的存储 ArrayBuffer对象.TypedArray对象.DataView对象是JavaScript操作二进制数据的一个接口. (1)ArrayBuffer对象:代表内存之中的一段二进制数据,它不能直接读写,只能通过视图(TypedArray视图和DataView视图)来读写,视图的作用是以指

[Python]将Excel文件中的数据导入MySQL

Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已有的数据,还要添加一列,名为“at_company”,值为821. 流程 (1)获取excel文件列表,并根据excel文件名确定之后需要创建的table名: (2)连接mysql (3)创建table (4)插入数据 (5)断开连接 依赖模块 1. xlrd # to read excel fil