js 将二进制文件流,下载为excel文件

吃西瓜

现成的粒子

二进制流,是一种计算机文件格式,它的数据以二进制形式存储,与文本文件不同,

二进制文件可以包含任意类型的数据,例如:图像、音频、视频、可执行文件、压缩文件等,而文本文件则仅仅包含 ASCII 码或其他编码的字符数据。

  • 常见的: 'Blob、ArrayBuffer、File、FileReader 和 FormData'
  • 在浏览器中长这样:



blobType 指的是,服务端返回的 Content-Type中mine-type,

常用的excel类型一般有2种:application/vnd.ms-excel 或 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

如:

javascript 复制代码
export const filmOrderExcelOut = (parameter: Record<any, any>) => {
	return request({
		method: 'post',
		url: Api.filmOrderExcelOut,
		data: parameter,
		responseType: 'blob'   `【一定得加这个】`
	})
}

--------------------------------------------------------------------

// 导出表格
const exportExcel = async () => {
	try {
		let { data } = await orderApi.filmOrderExcelOut(searchParams.value)
		
		let blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
		
		let file = new File([blob], '订单.xlsx', {
			lastModified: new Date() as any,
			type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
		})
		// console.log('file=', file)
		
		const a = document.createElement('a')
		a.style.display = 'none'
		document.body.appendChild(a)
		const url = URL.createObjectURL(file)
		a.href = url
		a.download = file.name
		a.click()
		// 清理
		document.body.removeChild(a)
		URL.revokeObjectURL(url)
	} catch (error) {
		message.error('网络请求发送失败~')
	}
}

出错的地方

  • 问题:成功将文件流转换成了excel文件,并下载了,但是下载后的文件打不了!!!
  • 原因:就是因为请求接口时,少了这个 responseType: 'blob' 配置项
javascript 复制代码
export const filmOrderExcelOut = (parameter: Record<any, any>) => {
	return request({
		method: 'post',
		url: Api.filmOrderExcelOut,
		data: parameter,
		responseType: 'blob'   `【一定得加这个】`
	})
}

`responseType`:表示,服务器响应的数据类型,可以是 'arraybuffer','blob','document','json','text','stream'等
  • arraybuffer:设置响应类型为二进制对象【返回的是一个包含二进制数据的 JavaScript ArrayBuffer 类型化数组】
  • blob:设置响应类型为二进制对象【返回的是一个包含二进制数据的 Blob 对象】
  • document: 设置响应类型为html document 或 xml document,具体根据接收到的数据的 MIME 类型而定
  • json: 设置响应类型为json类型,日常开发中常用
  • text:设置响应类型为text文本类型
相关推荐
螺丝钉tina5 小时前
[Playwright] [02]常用命令与调试:Debug UI、Mode和 Trace Viewer
开发语言·javascript·测试工具·ui·自动化
开开心心就好6 小时前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
এ慕ོ冬℘゜6 小时前
JS 事件循环、宏任务微任务:单线程底层原理 + 执行顺序
开发语言·javascript·ecmascript
web打印社区6 小时前
Lodop排障总纲-常见报错一张表
开发语言·前端·javascript·chrome·websocket
程序员大阳7 小时前
副队长JavaScript教程(56)-DOM之表单操作
javascript·dom·表单操作
Dxy12393102167 小时前
JS AES加密详解
开发语言·javascript·ecmascript
FRing038 小时前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
jktantan9 小时前
(二)Vue 3 的 attrs 不是响应式:el-form 扩展属性同步的三种方案
前端·javascript·vue.js·element-plus
echome88810 小时前
JavaScript async/await 错误处理:别让 Promise 静默失败
开发语言·前端·javascript·promise
#麻辣小龙虾#11 小时前
网页布局css中flex+margin的组合布局技巧
开发语言·前端·javascript