ファイル フローの例は次のとおりです。
encodeURIComponent: URLパラメータの「&」が切り捨てられる問題を解決
var xhr = new XMLHttpRequest();
var scene = encodeURIComponent("cid="+team_channel_id+"&groupType=0&type=team")
xhr.open('GET', market_url + "/admin/activity/url_list?scene="+scene+"&width=280&envVersion="+env_version, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.onload = function () {
// 请求完成
if (this.status === 200) {
// 返回200
var blob = this.response;
var reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64
reader.onload = function (e) {
console.log(e.target.result)
$("#imgQrcode_bind").attr("src",e.target.result);
//下载图片 base64转blob
var aLink = document.createElement("a"); // 创建一个a标签
var blob = base64ToBlob(e.target.result);
var event = document.createEvent("HTMLEvents");
event.initEvent("click", true, true);
aLink.download = 'qrcode.png'; // 使用时间戳给文件命名
aLink.href = URL.createObjectURL(blob);
aLink.click();
}
}else{
$(".hint").text('加载失败!');
$('.prm-mod').modal();
}
};
// 发送ajax请求
xhr.send()
// base64转Blob对象
function base64ToBlob(code) {
var parts = code.split(";base64,");
var contentType = parts[0].split(":")[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uint8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; i++) {
uint8Array[i] = raw.charCodeAt(i);
}
return new Blob([uint8Array], {type: contentType});
}