From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/utils/filt.ts |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 0 deletions(-)

diff --git a/src/utils/filt.ts b/src/utils/filt.ts
new file mode 100644
index 0000000..b1a7b2c
--- /dev/null
+++ b/src/utils/filt.ts
@@ -0,0 +1,157 @@
+export const openWindow = (
+  url: string,
+  opt?: {
+    target?: '_self' | '_blank' | string
+    noopener?: boolean
+    noreferrer?: boolean
+  }
+) => {
+  const { target = '__blank', noopener = true, noreferrer = true } = opt || {}
+  const feature: string[] = []
+
+  noopener && feature.push('noopener=yes')
+  noreferrer && feature.push('noreferrer=yes')
+
+  window.open(url, target, feature.join(','))
+}
+
+/**
+ * @description: base64 to blob
+ */
+export const dataURLtoBlob = (base64Buf: string): Blob => {
+  const arr = base64Buf.split(',')
+  const typeItem = arr[0]
+  const mime = typeItem.match(/:(.*?);/)![1]
+  const bstr = window.atob(arr[1])
+  let n = bstr.length
+  const u8arr = new Uint8Array(n)
+  while (n--) {
+    u8arr[n] = bstr.charCodeAt(n)
+  }
+  return new Blob([u8arr], { type: mime })
+}
+
+/**
+ * img url to base64
+ * @param url
+ */
+export const urlToBase64 = (url: string, mineType?: string): Promise<string> => {
+  return new Promise((resolve, reject) => {
+    let canvas = document.createElement('CANVAS') as Nullable<HTMLCanvasElement>
+    const ctx = canvas!.getContext('2d')
+
+    const img = new Image()
+    img.crossOrigin = ''
+    img.onload = function () {
+      if (!canvas || !ctx) {
+        return reject()
+      }
+      canvas.height = img.height
+      canvas.width = img.width
+      ctx.drawImage(img, 0, 0)
+      const dataURL = canvas.toDataURL(mineType || 'image/png')
+      canvas = null
+      resolve(dataURL)
+    }
+    img.src = url
+  })
+}
+
+/**
+ * Download online pictures
+ * @param url
+ * @param filename
+ * @param mime
+ * @param bom
+ */
+export const downloadByOnlineUrl = (
+  url: string,
+  filename: string,
+  mime?: string,
+  bom?: BlobPart
+) => {
+  urlToBase64(url).then((base64) => {
+    downloadByBase64(base64, filename, mime, bom)
+  })
+}
+
+/**
+ * Download pictures based on base64
+ * @param buf
+ * @param filename
+ * @param mime
+ * @param bom
+ */
+export const downloadByBase64 = (buf: string, filename: string, mime?: string, bom?: BlobPart) => {
+  const base64Buf = dataURLtoBlob(buf)
+  downloadByData(base64Buf, filename, mime, bom)
+}
+
+/**
+ * Download according to the background interface file stream
+ * @param {*} data
+ * @param {*} filename
+ * @param {*} mime
+ * @param {*} bom
+ */
+export const downloadByData = (data: BlobPart, filename: string, mime?: string, bom?: BlobPart) => {
+  const blobData = typeof bom !== 'undefined' ? [bom, data] : [data]
+  const blob = new Blob(blobData, { type: mime || 'application/octet-stream' })
+
+  const blobURL = window.URL.createObjectURL(blob)
+  const tempLink = document.createElement('a')
+  tempLink.style.display = 'none'
+  tempLink.href = blobURL
+  tempLink.setAttribute('download', filename)
+  if (typeof tempLink.download === 'undefined') {
+    tempLink.setAttribute('target', '_blank')
+  }
+  document.body.appendChild(tempLink)
+  tempLink.click()
+  document.body.removeChild(tempLink)
+  window.URL.revokeObjectURL(blobURL)
+}
+
+/**
+ * Download file according to file address
+ * @param {*} sUrl
+ */
+export const downloadByUrl = ({
+  url,
+  target = '_blank',
+  fileName
+}: {
+  url: string
+  target?: '_self' | '_blank'
+  fileName?: string
+}): boolean => {
+  const isChrome = window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1
+  const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1
+
+  if (/(iP)/g.test(window.navigator.userAgent)) {
+    console.error('Your browser does not support download!')
+    return false
+  }
+  if (isChrome || isSafari) {
+    const link = document.createElement('a')
+    link.href = url
+    link.target = target
+
+    if (link.download !== undefined) {
+      link.download = fileName || url.substring(url.lastIndexOf('/') + 1, url.length)
+    }
+
+    if (document.createEvent) {
+      const e = document.createEvent('MouseEvents')
+      e.initEvent('click', true, true)
+      link.dispatchEvent(e)
+      return true
+    }
+  }
+  if (url.indexOf('?') === -1) {
+    url += '?download'
+  }
+
+  openWindow(url, { target })
+  return true
+}

--
Gitblit v1.8.0