导出文件类型为responseType:blob的问题

本文介绍了一种处理文件打印接口中出现的异常情况的方法。具体来说,针对后端在文件导出失败时返回JSON,而前端设置为接收blob类型数据的情况,文章提供了详细的解决方案,包括如何判断响应类型并进行相应的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:
文件打印接口成功导出文件流,失败返回json,失败时后端返回为json,前端打印响应值为文件流(导出文件类型responseType:blob)的问题。

前端无法解析json

当后端正常导出文件的时候,后端的响应类型是

response.setContentType("application/octet-stream");

或者其他,但是文件导出失败时,返回的类型是json

respons.setContentType("application/json")

这时候前端axios设置了blob时,那到的数据就是blob而不是json,是无法正常解析的。而要通过json转换的形式进行解析。

axios.post(url,data,responseType:blob).then(res=>{
	let data=res.data;	
	//先判断类型,如果是json就进行转换,输出后端的msg
	if(data.type=="application/json"){
		const reader=new FileReader();
		reader.οnlοad=function(){
		const result = JSON.parse(reader.result);
		//处理错误
		console.log(result)
		};
		reader.readAsText(data); 
	
		// 以下为官方的 FileReader.readAsText()的解释:
		// readAsText 方法可以将 Blob 或者 File 对象转根据特殊的编码格式转化为内容(字符串形式)
		// 这个方法是异步的,也就是说,只有当执行完成后才能够查看到结果,如果直接查看是无结果的,并返回undefined
        // 也就是说必须要挂载 实例下的 onload 或 onloadend 的方法处理转化后的结果
        // 当转化完成后, readyState 这个参数就会转换 为 done 即完成态, event("loadend") 挂载的事件会被触发,并可以通过事件返回的形参得到中的 FileReader.result 属性得到转化后的结果
		
	}else{
		//直接导出下载
	  const fileName=res.headers["content-disposition"].split(";").split("fileName=")[1];
	  let url=window.URL.createObjectURL(data);
	  var a =document.createElement('a');
	  document.body.appendChild(a);
	  a.href=url;
	  a.download=fileName;
	  a.click();
	  window.URL.revokeObjectURL(url);
	}
})
### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况时,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可证服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为或完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值