ajax下载文件

该博客介绍了如何利用Ajax请求在前端实现文件下载。主要原理是获取接口响应的response,将其转换为Blob对象,再借助a标签的download属性完成下载。同时提到了处理application/octet-stream类型文件的方法,并讨论了设置请求头信息和JSON数据转换。

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

主要是接口请求下载文件的时候

const xhr = new XMLHttpRequest()
xhr.open('get','http://www.baidu.com')
xhr.send()
xhr.onload = function(){
	const blob = new Blob([xhr.response],{type:'text/html'})
	const a = document.createElement('a')
	a.href = URL.createObjectURL(blob)
	a.domnload = 'baidu.html'
	a.click()
}

原理是请求成功后,我们会获取到响应体的response, 这个response就是我们要下载的内容,然后将它转换为blob对象, 然后通过a标签的download属性来实现文件下载
实现各种类型文件的下载:

const type = response.headers['content-type']
const blob = new Blob([response.data],{type})

有时候content-type也可能是 application/octet-stream, 这个时候可以用 file-type 来获取文件的 type 了

import {fileTypeFromStream} from 'file-type'
const type = await fileTypeFromSteam(response.body)
const blob = new Blob([response.data],{type})

设置请求头信息

xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')//设置为表单提交

把JSON数据转换为串行字符串

//参数:data表示数组或对象类型的数据
//返回值:串行字符串
function JSONtoString (data) {
    var a = [];  //临时数组
    if (data.constructor == Array) {  //处理数组
        for (var i = 0; i < data.length; i ++) {
            a.push(data[i].name + "=" + encodeURIComponent(data[i].value));
        }
    } else {  //处理对象
        for (var i in data) {
            a.push(i + "=" + encodeURIComponent(data[i]));
        }
    }
    return a.join("&");  //把数组转换为串行字符串,并返回
}

常见的下载方式为a标签

<a href="www.baidu.com" download="baidu.htmk">下载</a>
window.open('www.baidu.com','_blank')
location.href='www.baidu.com'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值