Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/deligenius/multiparser

multipart/form-data parser for Deno servers
https://github.com/deligenius/multiparser

Last synced: about 2 months ago
JSON representation

multipart/form-data parser for Deno servers

Awesome Lists containing this project

README

        

## Multiparser

> A Deno module for parsing multipart/form-data

[![tag](https://img.shields.io/badge/Deno%20-std%400.114.0-333?&logo=Deno)](https://deno.land/[email protected])

### Features:

- Very simple API
- Upload options
- Much faster than deno standard library

## Documentation

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!

### Usage
```ts
// multiParser
import { multiParser, Form, FormFile } from 'https://deno.land/x/multiparser@/mod.ts'

const form = await multiParser(request)

```
**Where**:

```request: Request``` is a raw server request coming from Deno http module.

**Result**:
- success, return `Form`
- fail, return `undefined`

**`Form` Definition**:

```ts
interface Form {
fields: Record;
files: Record;
}
```

### Basic Example:

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".

```ts
import { serve } from "https://deno.land/[email protected]/http/server.ts";
import { multiParser } from 'https://deno.land/x/multiparser@/mod.ts'

serve(async (req) => {

const parsed = await multiParser(req)
console.log(parsed);

return new Response(`

Deno http module



singleStr:

singleImg:



`, {
headers: {
"Content-Type": "text/html; charset=utf-8"
}
})

});

```

After you upload the form, the returned value would be like below:

```ts
form = {
fields: {
singleStr: "this is string value"
},
files: {
singleFile: {
name: "singleFile",
filename: "singleImg.png",
contentType: "image/png",
size: 11837,
content: [...]
}
}
}

```

### With Oak

```ts
import { Application, Context, NativeRequest } from "https://deno.land/x/[email protected]/mod.ts";
import { multiParser } from 'https://deno.land/x/multiparser@/mod.ts'

const app = new Application();

app.use(async (ctx) => {

if (ctx.request.url.pathname === '/upload') {
const form = await multiParser((ctx.request.originalRequest as NativeRequest).request)
if (form) {
console.log(form)
}
}

ctx.response.headers.set("Content-Type", "text/html; charset=utf-8")
ctx.response.body = `

Deno Oak framework



Text field title:

File:



`
});

await app.listen({ port: 8000 });
```