Multipart File Uploads
Core Features

Multipart File Uploads

Multipart File Uploads & File Storage

Voieform natively supports single and multi-file attachments on any form without requiring third-party storage setup (like Amazon S3 or Cloudflare R2). Attached files are securely uploaded, malware-scanned, stored in your cloud account storage, and included as downloadable links in your notifications and API responses.

Direct Multipart Streaming
Streams files directly from user forms with zero extra code needed.
Automated Virus & Type Check
Screens files for malicious code and verifies true MIME types before saving.
Secure Signed Links
Files are served via time-limited signed URLs to protect sensitive submission documents.
Email & Telegram Attachments
Direct links and inline previews included in all team notification alerts.

File Size & Storage Quotas by Plan Tier

Plan TierMax Single File SizeTotal Storage QuotaAllowed File Types
Essentiel ($3/mo)5 MB100 MBImages, PDF, DOCX, TXT
Professionnel ($10/mo)15 MB250 MBAll standard office & media types
Suprême ($20/mo)50 MB5 GBUnrestricted file types + archives

HTML Form Setup

Make sure your standard HTML form tag includes enctype="multipart/form-data":

upload-form.htmlhtml
<!-- HTML Form accepting file attachments -->
<form 
  action="https://voieform.com/f/pr_live_x92a" 
  method="POST" 
  enctype="multipart/form-data"
>
  <label for="applicant_name">Applicant Name</label>
  <input type="text" id="applicant_name" name="applicant_name" required />

  <label for="resume">Upload Resume (PDF / DOCX)</label>
  <input type="file" id="resume" name="resume" accept=".pdf,.docx" required />

  <!-- Multiple files upload input -->
  <label for="portfolio">Portfolio Documents (Optional)</label>
  <input type="file" id="portfolio" name="portfolio[]" multiple />

  <button type="submit">Submit Application</button>
</form>

JavaScript & React FormData Submission

upload.jsjavascript
// JavaScript FormData Upload Example (AJAX / React)
async function submitWithFiles(formElement) {
  const formData = new FormData(formElement);

  try {
    const response = await fetch("https://voieform.com/f/pr_live_x92a", {
      method: "POST",
      headers: {
        "Accept": "application/json"
        // Note: Do NOT set Content-Type header manually when sending FormData!
        // The browser automatically sets boundary headers.
      },
      body: formData
    });

    const result = await response.json();
    if (result.success) {
      alert("Files uploaded successfully! Submission ID: " + result.submission_id);
    } else {
      alert("Upload failed: " + result.error);
    }
  } catch (err) {
    console.error("Upload error:", err);
  }
}

Note on Content-Type Header

When sending FormData objects using fetch() or axios, do not manually specify the Content-Type header. The browser must automatically set it along with the multi-part boundary string.
Ctrl+I
Multipart File Uploads | Voieform