UNPKG

@krmao/react-basic

Version:
80 lines (79 loc) 4.1 kB
"use strict"; // noinspection JSUnusedGlobalSymbols Object.defineProperty(exports, "__esModule", { value: true }); var dist_1 = require("../../dist"); var BasicDownloadUtil = /** @class */ (function () { function BasicDownloadUtil() { } /** * 在 a 标签中加入 download 属性实现下载 * @param blob */ BasicDownloadUtil.download = function (blob) { var url = window.URL.createObjectURL(blob); var a = document.createElement("a"); a.href = url; a.download = "xxx.csv"; a.click(); a.parentNode.removeChild(a); }; BasicDownloadUtil.getBase64FromRemoteImageUrlByXMLHttpRequest = function (url, callback) { var finalUrl = "".concat(url).concat(dist_1.BasicValueUtil.stringContains(url, "?") ? "&" : "?", "__time=").concat(Date.now()); console.log("getBase64FromRemoteImageUrlByXMLHttpRequest start", finalUrl); var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.onload = function () { var reader = new FileReader(); reader.onloadend = function () { var base64Str = reader.result; console.log("getBase64FromRemoteImageUrlByXMLHttpRequest end", base64Str); callback === null || callback === void 0 ? void 0 : callback(base64Str); }; reader.readAsDataURL(xmlHttpRequest.response); }; xmlHttpRequest.onerror = function (ev) { console.log("getBase64FromRemoteImageUrlByXMLHttpRequest error", ev); callback === null || callback === void 0 ? void 0 : callback(null); }; xmlHttpRequest.open("GET", finalUrl, true); //region 增加以下代码有可能被服务端捕捉并禁止 // xmlHttpRequest.withCredentials = false; // xmlHttpRequest.setRequestHeader("Access-Control-Allow-Headers", "*"); // xmlHttpRequest.setRequestHeader("Access-Control-Allow-Origin", "*"); //endregion xmlHttpRequest.responseType = "blob"; xmlHttpRequest.send(); }; // 跨域问题 https://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror // 跨域文档 https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image // 跨域错误不能捕捉-1 https://bugs.chromium.org/p/chromium/issues/detail?id=118096#c5 // 跨域错误不能捕捉-2 https://stackoverflow.com/a/42723074/4348530 // antd upload 获取 base64 https://blog.csdn.net/wscwj8/article/details/105691170 BasicDownloadUtil.getBase64FromRemoteImageUrlByImage = function (url, callback) { var finalUrl = "".concat(url).concat(dist_1.BasicValueUtil.stringContains(url, "?") ? "&" : "?", "__time=").concat(Date.now()); console.log("getBase64FromRemoteImageUrlByImage start", finalUrl); var image = new Image(); image.setAttribute("crossOrigin", "Anonymous"); image.onload = function () { var canvas = document.createElement("canvas"); //region 防止生成的图片太大, 取最长边为 300 var maxEdge = 300; var quality = 0.685; var finalWidth = image.width > image.height ? maxEdge : (image.width * maxEdge) / image.height; var finalHeight = image.width > image.height ? (image.height * maxEdge) / image.width : maxEdge; canvas.width = finalWidth; canvas.height = finalHeight; //endregion canvas.getContext("2d").drawImage(image, 0, 0, finalWidth, finalHeight); var base64Str = canvas.toDataURL("image/jpeg", quality); console.log("getBase64FromRemoteImageUrlByImage end", base64Str); callback === null || callback === void 0 ? void 0 : callback(base64Str); }; image.onerror = function (e) { console.log("getBase64FromRemoteImageUrlByImage error", e); callback === null || callback === void 0 ? void 0 : callback(null); }; image.src = finalUrl; }; return BasicDownloadUtil; }()); exports.default = BasicDownloadUtil;