Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deligenius/multiparser
multipart/form-data parser for Deno servers
https://github.com/deligenius/multiparser
Last synced: about 12 hours ago
JSON representation
multipart/form-data parser for Deno servers
- Host: GitHub
- URL: https://github.com/deligenius/multiparser
- Owner: deligenius
- Created: 2020-05-25T18:39:28.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-09-02T13:46:48.000Z (about 2 years ago)
- Last Synced: 2024-08-04T01:11:28.176Z (3 months ago)
- Language: TypeScript
- Homepage:
- Size: 578 KB
- Stars: 28
- Watchers: 4
- Forks: 7
- Open Issues: 3
-
Metadata Files:
- Readme: readme.md
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 });
```