/
inputFile.ts
42 lines (36 loc) 路 1.46 KB
/
inputFile.ts
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
import { readableStreamFromReader } from "https://deno.land/std/streams/conversion.ts";
const _bufferToString = (buffer: Uint8Array): ReadableStream<Uint8Array> => {
return new ReadableStream({
start(controller) {
controller.enqueue(buffer);
controller.close();
}
});
};
export class InputFile {
stream: ReadableStream<Uint8Array>; // Content of file as a stream
size: number; // Total final size of the file content
filename: string; // File name
static fromPath = (filePath: string, filename: string): InputFile => {
const file = Deno.openSync(filePath);
const stream = readableStreamFromReader(file);
const size = Deno.statSync(filePath).size;
return new InputFile(stream, filename, size);
};
static fromBuffer = (buffer: Uint8Array, filename: string): InputFile => {
const stream = _bufferToString(buffer);
const size = buffer.byteLength;
return new InputFile(stream, filename, size);
};
static fromPlainText = (content: string, filename: string): InputFile => {
const buffer = new TextEncoder().encode(content);
const stream = _bufferToString(buffer);
const size = buffer.byteLength;
return new InputFile(stream, filename, size);
};
constructor(stream: ReadableStream<Uint8Array>, filename: string, size: number) {
this.stream = stream;
this.filename = filename;
this.size = size;
}
}