A Deno module for parsing multipart/form-data
- Very simple API
- Upload options
- Much faster than deno standard library
Multiparser version 2 aims to have better performance than V1. Since V1 is dependent on deno@std entirely, which is very unstable. So Multiparser V2 has less dependencies, and it's much faster!
// multiParserimport{multiParser,Form,FormFile}from'https://deno.land/x/multiparser@<version>/mod.ts'constform=awaitmultiParser(request)Where:
request: Request is a raw server request coming from Deno http module.
Result:
- success, return
Form - fail, return
undefined
Form Definition:
interfaceForm{fields: Record<string,string>;files: Record<string,FormFile|FormFile[]>;}Suppose your form has two fields, the first one has field name singleStr with text "this is string value" only, and the second field called singleImg with a img file named "singleImg.png".
import{serve}from"https://deno.land/std@0.114.0/http/server.ts";import{multiParser}from'https://deno.land/x/multiparser@<version>/mod.ts'serve(async(req)=>{constparsed=awaitmultiParser(req)console.log(parsed);returnnewResponse(` <h3>Deno http module</h3> <form action="/upload" enctype="multipart/form-data" method="post"> <div>singleStr: <input type="text" name="singleStr" /></div> <div>singleImg: <input type="file" name="singleImg"/></div> <input type="submit" value="Upload" /> </form>`,{headers: {"Content-Type": "text/html; charset=utf-8"}})});After you upload the form, the returned value would be like below:
form={fields: {<string>singleStr: "this is string value"},files: {singleFile: {<string>name: "singleFile",<string>filename: "singleImg.png",<string>contentType: "image/png",<number>size: 11837,<Uint8Array>content: [...]}}}import{Application,Context,NativeRequest}from"https://deno.land/x/oak@v10.5.0/mod.ts";import{multiParser}from'https://deno.land/x/multiparser@<version>/mod.ts'constapp=newApplication();app.use(async(ctx)=>{if(ctx.request.url.pathname==='/upload'){constform=awaitmultiParser((ctx.request.originalRequestasNativeRequest).request)if(form){console.log(form)}}ctx.response.headers.set("Content-Type","text/html; charset=utf-8")ctx.response.body=` <h3>Deno Oak framework</h3> <form action="/upload" enctype="multipart/form-data" method="post"> <div>Text field title: <input type="text" name="title" /></div> <div>File: <input type="file" name="singleFile"/></div> <input type="submit" value="Upload" /> </form> `});awaitapp.listen({port: 8000});