diff options
Diffstat (limited to 'std/mime')
-rw-r--r-- | std/mime/multipart.ts | 24 | ||||
-rw-r--r-- | std/mime/multipart_test.ts | 11 | ||||
-rw-r--r-- | std/mime/testdata/sample.txt | 27 |
3 files changed, 56 insertions, 6 deletions
diff --git a/std/mime/multipart.ts b/std/mime/multipart.ts index 26860e3de..d88ff3d13 100644 --- a/std/mime/multipart.ts +++ b/std/mime/multipart.ts @@ -8,13 +8,35 @@ type Writer = Deno.Writer; import { equal, findIndex, findLastIndex, hasPrefix } from "../bytes/mod.ts"; import { copyN } from "../io/ioutil.ts"; import { MultiReader } from "../io/readers.ts"; -import { FormFile } from "../multipart/formfile.ts"; import { extname } from "../path/mod.ts"; import { tempFile } from "../io/util.ts"; import { BufReader, BufWriter, UnexpectedEOFError } from "../io/bufio.ts"; import { encoder } from "../strings/mod.ts"; import { assertStrictEq } from "../testing/asserts.ts"; import { TextProtoReader } from "../textproto/mod.ts"; +import { hasOwnProperty } from "../util/has_own_property.ts"; + +/** FormFile object */ +export interface FormFile { + /** filename */ + filename: string; + /** content-type header value of file */ + type: string; + /** byte size of file */ + size: number; + /** in-memory content of file. Either content or tempfile is set */ + content?: Uint8Array; + /** temporal file path. + * Set if file size is bigger than specified max-memory size at reading form + * */ + tempfile?: string; +} + +/** Type guard for FormFile */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isFormFile(x: any): x is FormFile { + return hasOwnProperty(x, "filename") && hasOwnProperty(x, "type"); +} function randomBoundary(): string { let boundary = "--------------------------"; diff --git a/std/mime/multipart_test.ts b/std/mime/multipart_test.ts index 4658ce976..869932fbf 100644 --- a/std/mime/multipart_test.ts +++ b/std/mime/multipart_test.ts @@ -10,12 +10,13 @@ import { import { test, runIfMain } from "../testing/mod.ts"; import * as path from "../path/mod.ts"; import { - matchAfterPrefix, + FormFile, MultipartReader, MultipartWriter, + isFormFile, + matchAfterPrefix, scanUntilBoundary } from "./multipart.ts"; -import { FormFile, isFormFile } from "../multipart/formfile.ts"; import { StringWriter } from "../io/writers.ts"; const e = new TextEncoder(); @@ -94,7 +95,7 @@ test(async function multipartMultipartWriter(): Promise<void> { const mw = new MultipartWriter(buf); await mw.writeField("foo", "foo"); await mw.writeField("bar", "bar"); - const f = await open(path.resolve("./multipart/fixtures/sample.txt"), "r"); + const f = await open(path.resolve("./mime/testdata/sample.txt"), "r"); await mw.writeFile("file", "sample.txt", f); await mw.close(); }); @@ -173,7 +174,7 @@ test(async function multipartMultipartWriter3(): Promise<void> { test(async function multipartMultipartReader(): Promise<void> { // FIXME: path resolution - const o = await open(path.resolve("./multipart/fixtures/sample.txt")); + const o = await open(path.resolve("./mime/testdata/sample.txt")); const mr = new MultipartReader( o, "--------------------------434049563556637648550474" @@ -187,7 +188,7 @@ test(async function multipartMultipartReader(): Promise<void> { }); test(async function multipartMultipartReader2(): Promise<void> { - const o = await open(path.resolve("./multipart/fixtures/sample.txt")); + const o = await open(path.resolve("./mime/testdata/sample.txt")); const mr = new MultipartReader( o, "--------------------------434049563556637648550474" diff --git a/std/mime/testdata/sample.txt b/std/mime/testdata/sample.txt new file mode 100644 index 000000000..97e9bf553 --- /dev/null +++ b/std/mime/testdata/sample.txt @@ -0,0 +1,27 @@ +----------------------------434049563556637648550474
+content-disposition: form-data; name="foo"
+content-type: application/octet-stream
+
+foo
+----------------------------434049563556637648550474
+content-disposition: form-data; name="bar"
+content-type: application/octet-stream
+
+bar
+----------------------------434049563556637648550474
+content-disposition: form-data; name="file"; filename="tsconfig.json"
+content-type: application/octet-stream
+
+{ + "compilerOptions": { + "target": "es2018", + "baseUrl": ".", + "paths": { + "deno": ["./deno.d.ts"], + "https://*": ["../../.deno/deps/https/*"], + "http://*": ["../../.deno/deps/http/*"] + } + } +} +
+----------------------------434049563556637648550474--
|