升级package:web后Blob下载Excel文件损坏问题咨询
问题原因及修复方案
导致Excel文件损坏的核心原因
- 数据封装错误:
package:web的Blob构造函数要求传入JS原生的字节类对象(如TypedArray、ArrayBuffer),你当前写法[data.buffer.toJS].toJS是把ArrayBuffer包裹在一个JS数组里传给Blob,相当于给文件额外套了一层数组结构,破坏了Excel的原始字节布局,所以打开时提示损坏,但实际数据未丢失,修复后能正常读取。 - MIME类型不匹配:你设置的
text/plain是纯文本的MIME类型,和Excel文件(尤其是xlsx格式)的类型不匹配,这会导致Office软件或浏览器识别文件时出现异常,进一步触发损坏提示。
修复后的代码
final blob = web.Blob( [data.toJS], // 直接传入Uint8List对应的JS原生Uint8Array web.BlobPropertyBag( type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // xlsx格式的正确MIME类型 endings: 'native', ), ); web.HTMLAnchorElement() ..href = web.URL.createObjectURL(blob) ..setAttribute('download', filename) ..click() ..remove();
注:如果是旧版xls格式的Excel,MIME类型替换为
application/vnd.ms-excel
内容的提问来源于stack exchange,提问作者Cunibon
相关产品推荐
相关产品推荐

