UNPKG

synt_backend

Version:

Synt light-weight node backend service

67 lines (61 loc) 1.79 kB
const { formidable } = require("formidable"); import { uploadFileToBucket } from "./upload"; export function handleFormidableForm(req) { return new Promise((resolve, reject) => { let formFiles; let formData = {}; const form = formidable({ multiples: true }); // multipart required form.parse(req, async (err, fields, files) => { if (err) { reject(err); } formFiles = files.files; }); form.on("field", (fieldName, fieldValue) => { let value; try { value = JSON.parse(fieldValue); } catch (error) { value = fieldValue; } formData[fieldName] = value; }); form.once("end", () => { console.log("done"); resolve({ formFiles, formData }); }); }); } export async function uploadFiles(formFiles, formData, bucket, callback) { // handle form and check fields let calls = []; console.log("Uploading files"); // If formFiles is not an array, convert it to an array containing a single File object if (!Array.isArray(formFiles)) { formFiles = [formFiles]; } formFiles.forEach((f) => calls.push( new Promise((resolve, reject) => { uploadFileToBucket(f, bucket) .then((response) => { if (response.success) { resolve(response.File); } else { reject(response); } }) .catch((err) => reject(err)); }) ) ); // make sure all calls are done before callback let Files = await Promise.all(calls); formData.Files = Files; callback(formData); } export async function uploadFilesAsync(formFiles, formData, bucket) { return new Promise((resolve) => { uploadFiles(formFiles, formData, bucket, (formData) => resolve(formData)); }); }