85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
import { isNull } from '@/global/is'
|
|
|
|
export function webChooseFile(cb: (file: File) => unknown, accept?: string): void {
|
|
const id = 'file-selector-99999999'
|
|
let input = document.getElementById(id) as HTMLInputElement
|
|
if (isNull(input)) {
|
|
input = document.createElement('input')
|
|
input.id = id
|
|
input.type = 'file'
|
|
input.style.position = 'fixed'
|
|
input.style.left = '-10000px'
|
|
document.body.appendChild(input)
|
|
} else {
|
|
input.value = ''
|
|
}
|
|
if (accept) {
|
|
input.accept = accept
|
|
} else {
|
|
input.removeAttribute('accept')
|
|
}
|
|
input.onchange = (): void => {
|
|
if (input.files?.length) {
|
|
cb(input.files[0])
|
|
}
|
|
}
|
|
input.classList.add('selectFile')
|
|
const e = document.createEvent('MouseEvent') as unknown as Event
|
|
e.initEvent('click', false, true)
|
|
input.dispatchEvent(e)
|
|
}
|
|
|
|
export function webMulChooseFile(cb: (file: FileList) => unknown, accept?: string): void {
|
|
const id = 'file-selector-88888'
|
|
let input = document.getElementById(id) as HTMLInputElement
|
|
if (isNull(input)) {
|
|
input = document.createElement('input')
|
|
input.id = id
|
|
input.type = 'file'
|
|
input.multiple = true
|
|
input.style.position = 'fixed'
|
|
input.style.left = '-100000px'
|
|
document.body.appendChild(input)
|
|
} else {
|
|
input.value = ''
|
|
}
|
|
if (accept) {
|
|
input.accept = accept
|
|
} else {
|
|
input.removeAttribute('accept')
|
|
}
|
|
input.onchange = (): void => {
|
|
if (input.files?.length) {
|
|
cb(input.files)
|
|
}
|
|
}
|
|
input.classList.add('selectFile')
|
|
const e = document.createEvent('MouseEvent') as unknown as Event
|
|
e.initEvent('click', false, true)
|
|
input.dispatchEvent(e)
|
|
}
|
|
|
|
export function webDownloadFileByUrl(url: string, name: string): void {
|
|
const xhr = new XMLHttpRequest()
|
|
xhr.open('GET', url, true)
|
|
xhr.responseType = 'blob'
|
|
xhr.onload = (): void => {
|
|
if (xhr.status === 200) {
|
|
const a = document.createElement('a')
|
|
a.download = name
|
|
a.href = URL.createObjectURL(xhr.response)
|
|
a.click()
|
|
}
|
|
}
|
|
xhr.send()
|
|
}
|
|
|
|
export function downloadToTxt(text: string, filename: string) {
|
|
const element = document.createElement('a')
|
|
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text))
|
|
element.setAttribute('download', filename)
|
|
element.style.display = 'none'
|
|
document.body.appendChild(element)
|
|
element.click()
|
|
}
|