Multipart
Efficient Multipart Data Handling in MinimaJS
Installation:
- npm
- Yarn
- pnpm
npm install @minimajs/multipart
yarn add @minimajs/multipart
pnpm add @minimajs/multipart
-
Targeted File Access:
The
getFile(field: string)
function retrieves a specific file from the multipart request based on its field name.import { getFile } from "@minimajs/multipart";
async function handleFile(fieldName: string) {
const uploadedFile = await getFile(fieldName);
const fileBuffer = await uploadedFile.buffer();
// Process the file buffer as needed...
} -
Iterating Over Multiple Files:
The
getFiles()
function provides an asynchronous iterator that allows you to efficiently process each uploaded file sequentially.import { getFiles } from "@minimajs/multipart";
async function handleMultipleFiles() {
for await (const file of getFiles()) {
console.log(`Received file: ${file.name}`);
// Process each uploaded file...
}
} -
Retrieving Form Field Values:
The
getFields()
function returns a promise that resolves to aRecord<string, unknown>
, providing access to all submitted form fields and their corresponding values.async function handleFormFields() {
const formData = await getFields();
const username = formData.username as string; // Type casting for clarity
const email = formData.email as string;
// Process form data as required...
} -
Direct Body Access:
The
getBody()
function returns an asynchronous iterator that yields an array containing the field name and its corresponding value (which can be a string or aFile
object). This offers maximum flexibility for handling all parts of the request body.async function handleRequestBody() {
for await (const [fieldName, fieldValue] of getBody()) {
if (typeof fieldValue === "string") {
console.log(`Field: ${fieldName}, Value: ${fieldValue}`);
} else {
console.log(`File uploaded: ${fieldValue.name}`);
// Handle file upload...
}
}
}
Example: Robust File Upload Handling
import { createWriteStream } from "node:fs";
import { pipeline } from "stream/promises";
async function handleFileUpload() {
for await (const file of getFiles()) {
const writeStream = createWriteStream(file.name);
await pipeline(file.stream, writeStream);
}
return "Files uploaded successfully!";
}
-
File Class:
This class encapsulates the information and functionality related to uploaded files.
-
Properties:
field
: The name of the form field associated with the uploaded file. (Readonly)filename
: The original filename of the uploaded file. (Readonly)encoding
: The character encoding of the file content. (Readonly)mimeType
: The MIME type of the file content. (Readonly)stream
: A readable stream representing the file content. (Readonly)ext
: Getter property that retrieves the file extension from the filename.
-
Methods:
get stream()
: Ensures the existence of the stream before returning it. (Readonly)buffer()
: Reads the entire file content into a buffer.async move(dir = process.cwd(), filename?: string)
: Moves the uploaded file to the specified directory with an optional new filename.flush()
: Discards the remaining content of the stream.
-
isFile Function:
This function checks if a given object is an instance of the
File
class.