记一次 接口返回文件流或 json 类型数据时,前端的兼容处理。
要求调用接口上传文件,成功时,返回值为 json ,提示 json 中的信息;失败时,返回值为流,下载的流文件。需要前端进行兼容判断。

大致思路:设置 responseType: 'blob' 作为返回值的解析方式,统一以 blob 的方式解析,然后通过 FileReader.readAsText 读取 blob 数据为 string ,根据 string 能否解析为 json 判断接口返回的数据类型。

axios({
	...	// 请求参数
	responseType: 'blob' // 设置responseType: 'blob'作为返回值的解析方式,统一以blob的方式解析
}).then(res => {
	// 通过FileReader读取blob数据为string
	const reader = new FileReader();
	reader.onload = event => {
		try {
			// 将读取的string转换为json
			// 若果能转换成功 => 接口返回的是json数据,提示报错信息
			const json = JSON.parse(event.target.result);
			if (json.success) {
				this.$message.success(json.msg)
		} catch (err) {
			// 不能被转换成json => 接口返回的是blob, 下载blob文件
			let href = window.URL.createObjectURL(res )
			let saveLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
			saveLink.href = href
			saveLink.download = filename
			document.body.appendChild(saveLink)
			let event = document.createEvent('MouseEvents')
			event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
			saveLink.dispatchEvent(event)
			// 删除标签  解决火狐兼容问题(异步删除)
			setTimeout(() => {
			    document.body.removeChild(saveLink)
			    window.URL.revokeObjectURL(href)
			}, 0)
	reader.readAsText(res);
let file = this.fileCopy [0].raw;
var formData = new FormData();
formData.append('file',file)
upload(formDa
				
最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,在对响应数据进行校验的时候,可以通过(key1.key2.key3)形式获取嵌套字典值的方法获取响应值,再和预期值比较 keys_list = keys.split('.') #以“.”为间隔,将字符串分裂为多个字符串,其实字符串为字典的键,保存在列表keys_list里 if isinstance(date,dict): #如果传入的数据为字典 dictionary = dict(date) #初始化字典 for i in keys_list: #按照keys_list
前端处理数据时,需要处理:因为前端接收到的是一个对象(object) JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个数组,可选的仅包括指定的属性。 1、将JSON 对象转换为字符串 var dataObj ... // 封装axios的下载数据转换成excel export function DownLoadToExcel(url, data = {}, fileName) { fileName = fileName + '.xls' return new Promise((resolve, reject) => { axios
背景:在新窝点学习,需求是导出表格(固定,其它文件类型这里不涉及),但后端最大导出量是20W,超过20W查询就返回JSON格式数据,如{“code”: “xxx”, “msg”:“超过20W,导出失败”, xxxx},所以需要前端去做导出数据处理,废话也不多说,走程: 一、我们需要处理封装的请求: ps:我这里使用flyio,也验证过了axios // 给请求加responseType属性,具体可以查看mdn,看字面意思你可理解为加了此属性可使得响应返回的类型是XXX,因为文件类型,所以需要加blob或
哈哈哈哈哈33333_111111111eeeeeeeeeeeeeeeeeee_话单号码_20200810-174122.xlsx // 中文解码处理 function decodeUtf8(bytes) { var encoded = ""; for (var i = 0; i < bytes.length; i++) { encoded += bytes[i].toString(16)
后台返回json数据和前台解析json数据 一般来说web开发中,前台采用json数据提交给后台,后台处理数据以后返回json数据给前台,前台解析json,显示数据。 总而言之,前后台直接交换的数据格式最常用的非json数据无疑了。 这里就总结一些json数据的前后台处理方式。 1.JSON数据 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据...
那么问题就是我该如何得到这组数据中的msg中的数据或者data中的name的数据 JSON.parse()方法,这个方法在我们的JS中是一个自带的方法, 调用的时候直接通过JS对象.属性名就可以食用了 在这个示例中,我们使用@GetMapping注解来标记方法,表示该方法会处理GET请求,并且返回的是一个List<User>类型的数据。由于类上面使用了@RestController注解,所以SpringBoot会自动将返回数据转换成JSON格式。 当我们访问该接口时,会得到一个JSON格式的数据。 另外,如果需要返回单个对象,可以使用@RequestBody注解来接收请求体中的数据,并将其转换成对象。 示例代码如下: ```java @RestController public class UserController { @PostMapping("/user") public User createUser(@RequestBody User user) { // 保存用户数据 return user; 在这个示例中,我们使用@PostMapping注解来标记方法,表示该方法会处理POST请求,并且接收一个User类型的数据。由于类上面使用了@RestController注解,所以SpringBoot会自动将返回数据转换成JSON格式。