导出CSV时为什么文件内容总是空的?
在做数据导出功能时,用Blob生成CSV文件,但下载后文件内容一直是空的。明明控制台打印数据是正常的…
尝试用字符串拼接方式导出,代码类似这样:
const csvContent = "id,namen1,测试";
const blob = new Blob([csvContent], { type: 'text/csv' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'data.csv';
link.click();
但下载的文件确实空的,连表头都没有。如果改成手动创建标签再删除,会不会是DOM操作的问题?或者Blob类型设置不对?
也试过用Papa Parse库转换数据,导出时直接得到类似”data:application/octet-stream;base64…”的链接,但这样生成的文件同样为空…
直接用这个:
重点就俩:
第一个是加个
uFEFF,这是 BOM 头,告诉 Excel 这文件是 UTF-8 编码的,不然中文环境它认不出来;第二个是
type='text/csv;charset=utf-8;'明确写上字符集,别省略。Papa Parse 那种 data URI 的方式其实也能用,但你得确认它生成的 Base64 里是不是也加了 BOM,如果没加,照样要手动补上。
顺便说一句,别用
link.remove()之类的操作,DOM 删除时机不是问题,Blob URL 在点击后浏览器会自动处理下载,删不删 link 都不影响内容——真要删也得等click()之后。试试这个,保准能出来。
const csvContent = "id,namen1,测试";
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'data.csv');
link.click();
如果还是空的,检查浏览器兼容性或者试试用encodeURI包裹一下链接。Papa Parse的话,确保数据格式是数组,直接传对象肯定不行。