Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 5x 2x 2x 2x 2x 2x 2x 5x 1x 1x 1x 5x 2x 2x 2x 2x 2x 2x 5x 1x 1x 5x 1x 1x 1x 1x 1x 1x 5x | /**
* 各种内容类型的读取器。
*
* @public
*/
export interface ReadFileReader {
/**
* 读取并返回文本内容。
*/
text(): Promise<string>
/**
* 读取并返回 JSON 内容。
*/
json<T>(): Promise<T>
/**
* 读取并返回 dataURL 内容。
*/
dataUrl(): Promise<string>
/**
* 读取并返回 base64 内容。
*/
base64(): Promise<string>
/**
* 读取并返回 ArrayBuffer 内容。
*/
arrayBuffer(): Promise<ArrayBuffer>
}
/**
* 读取给定文件的内容。
*
* @public
* @param file 要读取的文件
* @returns 返回各种内容类型的读取器
* @example
* ```typescript
* const file = new File(['{"x":1}'], 'x.json')
* const reader = readFile(file)
* console.log(await reader.text()) // => '{"x":1}'
* console.log(await reader.json()) // => {x: 1}
* ```
*/
export function readFile(file: File): ReadFileReader {
const text: ReadFileReader['text'] = () => {
return new Promise((resolve, reject) => {
const fileReader = new FileReader()
fileReader.onload = () => {
resolve(fileReader.result as string)
}
fileReader.onerror = () => {
reject(fileReader.error)
}
fileReader.readAsText(file)
})
}
const json: ReadFileReader['json'] = () => {
return text().then(data => {
try {
return JSON.parse(data)
} catch (err) {
return Promise.reject(err)
}
})
}
const dataUrl: ReadFileReader['dataUrl'] = () => {
return new Promise((resolve, reject) => {
const fileReader = new FileReader()
fileReader.onload = () => {
resolve(fileReader.result as string)
}
fileReader.onerror = () => {
reject(fileReader.error)
}
fileReader.readAsDataURL(file)
})
}
const base64: ReadFileReader['base64'] = () => {
return dataUrl().then(url => {
return url.split(';base64,')[1]
})
}
const arrayBuffer: ReadFileReader['arrayBuffer'] = () => {
return new Promise((resolve, reject) => {
const fileReader = new FileReader()
fileReader.onload = () => {
resolve(fileReader.result as ArrayBuffer)
}
fileReader.onerror = () => {
reject(fileReader.error)
}
fileReader.readAsArrayBuffer(file)
})
}
return { text, json, dataUrl, base64, arrayBuffer }
}
|