file-utils-plus
Version:
238 lines (227 loc) • 7.49 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('browser-md5-file'), require('ali-oss'), require('qiniu-js')) :
typeof define === 'function' && define.amd ? define(['exports', 'browser-md5-file', 'ali-oss', 'qiniu-js'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.fileUploadUtils = {}, global.BMF, global.OSS, global.QiniuOSS));
})(this, (function (exports, BMF, OSS, QiniuOSS) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var BMF__default = /*#__PURE__*/_interopDefaultLegacy(BMF);
var OSS__default = /*#__PURE__*/_interopDefaultLegacy(OSS);
var QiniuOSS__namespace = /*#__PURE__*/_interopNamespace(QiniuOSS);
const getMd5 = (file) => {
const bmf = new BMF__default["default"]();
return new Promise((resolve, reject) => {
bmf.md5(file, (err, md5) => {
if (err) {
return reject(err);
}
resolve(md5);
});
});
};
const getImageAttribute = (file) => {
return new Promise((resolve) => {
let reader = new FileReader();
reader.onload = function(e) {
let result = e.target?.result;
let img = document.createElement("img");
img.src = result;
img.onload = function() {
resolve({
width: img.width,
height: img.height
});
};
};
reader.onerror = function(e) {
resolve(e);
};
reader.readAsDataURL(file);
});
};
const fileType = (value) => {
if (value.lastIndexOf("audio") !== -1) {
return "audio";
} else if (value.lastIndexOf("image") !== -1) {
return "image";
} else {
return "";
}
};
const isExistFile = (url) => {
let xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", `${url}?${new Date().getTime()}`, false);
xmlhttp.send();
if (xmlhttp.readyState === 4) {
if (xmlhttp.status === 200) {
return true;
} else {
return false;
}
} else {
return false;
}
};
const createAliOSS = (ossInfo) => {
return new OSS__default["default"]({
region: ossInfo.region,
bucket: ossInfo.bucket,
accessKeyId: ossInfo.accessKeyId,
accessKeySecret: ossInfo.accessKeySecret,
stsToken: ossInfo.securityToken,
secure: true
});
};
const uploadFileToAliOss = async ({ file, path, baseUrl, options, argument }) => {
let ext = file.name.substring(file.name.lastIndexOf(".") + 1);
const client = await createAliOSS(options);
let audioAttribute = {};
let imageAttribute = {};
try {
if (fileType(file.type) === "image") {
imageAttribute = await getImageAttribute(file);
}
const md5 = await getMd5(file);
const fileName = `${md5}.${ext}`;
await client.multipartUpload(`${path}/${fileName}`, file, {});
return {
url: `${baseUrl}/${path}/${fileName}`,
name: file.name.substring(0, file.name.lastIndexOf(".")),
md5,
size: file.size,
ext,
...imageAttribute,
...argument,
...audioAttribute
};
} catch (e) {
throw new Error(`\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25:${e}`);
}
};
const uploadFileToQiniuOss = async ({ file, path, baseUrl, token, argument }) => {
let audioAttribute = {};
let imageAttribute = {};
let ext = file.name.substring(file.name.lastIndexOf(".") + 1);
if (fileType(file.type) === "image") {
imageAttribute = await getImageAttribute(file);
}
const md5 = await getMd5(file);
const fileName = `${md5}.${ext}`;
return new Promise((resolve) => {
let observable = QiniuOSS__namespace.upload(file, `${path}/${fileName}`, token);
const observer = {
complete() {
resolve({
url: `${baseUrl}/${path}/${fileName}`,
name: file.name.substring(0, file.name.lastIndexOf(".")),
md5,
size: file.size,
ext,
...imageAttribute,
...argument,
...audioAttribute
});
}
};
observable.subscribe(observer);
});
};
const blobToFile = (blob, fileName, options) => {
return new File([blob], fileName, options);
};
const fileToBase64 = (file) => {
return new Promise((resolve) => {
let fileReader = new FileReader();
fileReader.readAsDataURL(file);
fileReader.onload = function(e) {
resolve(e.target?.result);
};
});
};
const base64ToBlob = (base64) => {
return new Promise((resolve) => {
const arr = base64.split(",");
const mime = arr[0].match(/:(.*?);/);
const type = mime[0];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
resolve(new Blob([u8arr], { type }));
});
};
const base64ToFile = (base64, filename) => {
return new Promise((resolve) => {
let arr = base64.split(",");
const mime = arr[0].match(/:(.*?);/);
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return resolve(new File([u8arr], filename, { type: mime[1] }));
});
};
const fileToBuffer = (files) => {
return new Promise((resolve) => {
const fileReader = new FileReader();
fileReader.onload = function() {
const result = fileReader.result;
resolve(result);
};
fileReader.readAsArrayBuffer(files);
});
};
const urlToFile = (url) => {
return new Promise((resolve) => {
let http = new XMLHttpRequest();
http.open("GET", url, true);
http.responseType = "blob";
http.onload = function(e) {
if (this.status === 200 || this.status === 0) {
resolve(blobToFile(e.target.response, url.substring(url.lastIndexOf("/") + 1)));
}
};
http.send();
});
};
exports.base64ToBlob = base64ToBlob;
exports.base64ToFile = base64ToFile;
exports.blobToFile = blobToFile;
exports.createAliOSS = createAliOSS;
exports.fileToBase64 = fileToBase64;
exports.fileToBuffer = fileToBuffer;
exports.fileType = fileType;
exports.getImageAttribute = getImageAttribute;
exports.getMd5 = getMd5;
exports.isExistFile = isExistFile;
exports.uploadFileToAliOss = uploadFileToAliOss;
exports.uploadFileToQiniuOss = uploadFileToQiniuOss;
exports.urlToFile = urlToFile;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
}));
//# sourceMappingURL=index.umd.js.map