捕捉后端在成功时候返回的文件流以及在失败返回的是code

  this.$http({
                            url: this.$http.adornUrl(`/manage/biz/bizindexdatainitial/getExcelWrite?projectId=${this.dataForm.companyMineId}`),
                            method: 'get',
                            data: this.$http.adornParams({
                            }),
                            responseType: 'blob'
                        }).then((data) => {
                            let _this = this
                            let fileReader = new FileReader();
                            fileReader.onload = function () {
                                try {
                                    let jsonData = JSON.parse(this.result);  // 说明是普通对象数据,后台转换失败
                                    if (jsonData.code === 500) {
                                        _this.$message.error(jsonData.msg)
                                    }
                                } catch (err) {
                                    let filename = decodeURI(data.headers['filename'])
                                    _this.handledownloadFiles(data.data, filename)
                                }

                            }
                            fileReader.readAsText(data.data)
                        })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的第一个问题是关于后端返回文件和json对象的处理。在前端中,我们可以使用 AJAX 或 Fetch API 来发送请求和接收响应。当后端返回文件时,我们需要使用 Blob 或者 ArrayBuffer 对其进行处理,具体如下: ```javascript fetch('/api/download') .then(response => { if (response.ok) { // 根据 Content-Type 处理文件 const contentType = response.headers.get('Content-Type'); if (contentType.includes('application/pdf')) { return response.blob(); } else if (contentType.includes('image/jpeg')) { return response.arrayBuffer(); } else { throw new Error('不支持的文件类型'); } } else { throw new Error('请求失败'); } }) .then(data => { // 处理文件数据 if (data instanceof Blob) { const url = URL.createObjectURL(data); // 创建 a 标签并模拟点击下载 const link = document.createElement('a'); link.href = url; link.download = 'file.pdf'; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); } else if (data instanceof ArrayBuffer) { // 处理图片数据 } }) .catch(error => { console.error(error); }); ``` 当后端返回 json 对象时,我们可以使用 response.json() 方法将其转换为 JavaScript 对象,然后根据对象中的状态码和状态信息进行处理,具体如下: ```javascript fetch('/api/submit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: '张三', age: 18 }) }) .then(response => { if (response.ok) { return response.json(); } else { throw new Error('请求失败'); } }) .then(data => { if (data.Status === 'true') { // 操作成功 console.log(data.Result); } else { // 操作失败 console.error(data.StatusCode, data.Result); } }) .catch(error => { console.error(error); }); ``` 以上代码示例中,我们使用 fetch() 方法发送请求,并在 then() 方法中处理响应数据。对于文件,我们需要根据 Content-Type 处理返回的数据,并使用 URL.createObjectURL() 方法将数据转换为 URL,然后创建一个 a 标签并模拟点击下载。对于 json 对象,我们使用 response.json() 方法将其转换为 JavaScript 对象,并根据对象中的状态码和状态信息进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值