sard-uniapp
Version:
sard-uniapp 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库
105 lines (104 loc) • 3.11 kB
JavaScript
import { isObject, isString } from './is';
import { logError } from './log';
import { isHarmony, isMp, isWeb } from './system';
/**
* @description: 判断url是否为图片url
* @param {string} url
* @return {boolean}
*/
export function isImageUrl(url) {
const rPicMime = /\.(?:jpg|jpeg|png|gif|svg|bmp|webp|tiff|tif|heic|heif)$/i;
return (typeof url === 'string' &&
(rPicMime.test(url) || url.indexOf('data:image') === 0));
}
/**
* @description: 判断url是否为视频url
* @param {string} url
* @return {boolean}
*/
export function isVideoUrl(url) {
const rVideoMime = /\.(avi|mp4|mov|wmv|flv|mkv|mpeg|mpg|3gp|webm|swf|rmvb|vob|ts|mts|m2ts|divx|asf|ogv|f4v)$/i;
return (typeof url === 'string' &&
(rVideoMime.test(url) || url.indexOf('data:video') === 0));
}
/**
* @description: 判断url是否为文件url
* @param {string} url
* @return {boolean}
*/
export function isFileUrl(url) {
return url.includes('/');
}
/**
* @description: 读取文件内容
* @param {File} file
* @param {ResultType} resultType
* @return {Promise<void | string>}
*/
export function readFileContent(file, resultType) {
return new Promise((resolve) => {
if (resultType === 'file') {
resolve();
return;
}
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
if (resultType === 'dataUrl') {
reader.readAsDataURL(file);
}
else if (resultType === 'text') {
reader.readAsText(file);
}
});
}
/**
* @description: 从路径中获取文件名
* @param {string} path
* @param {boolean} ext 是否包含扩展名
* @return {string}
*/
export function getFileName(path, ext = true) {
const name = path.match(/\/([^/]+)$/)?.[1] || '';
return ext ? name : name.replace(/\.[^.]+$/, '');
}
/**
* 将临时文件路径转换为 base64 编码字符串
* @param filePath
* @returns
*/
export function readAsDataURL(filePath) {
if (isString(filePath) && filePath.startsWith('data:')) {
return filePath;
}
const result = uni.getFileSystemManager().readFileSync(filePath, 'base64');
const data = isObject(result) && 'data' in result ? result.data : result;
return 'data:image/png;base64,' + (isString(data) ? data : '');
}
export async function filePathToDataURL(filePath) {
if (isWeb) {
return filePath;
}
if (isMp || isHarmony) {
return readAsDataURL(filePath);
}
return new Promise((resolve, reject) => {
try {
plus.io.resolveLocalFileSystemURL(filePath, (entry) => {
;
entry.file((file) => {
const fileReader = new plus.io.FileReader();
fileReader.readAsDataURL(file, 'utf-8');
fileReader.onloadend = (evt) => {
resolve(evt.target.result);
};
});
});
}
catch (err) {
logError(err);
reject(err);
}
});
}