@krmao/react-basic
Version:
### features
80 lines (79 loc) • 4.1 kB
JavaScript
// 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;
;