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 Tier | Max Single File Size | Total Storage Quota | Allowed File Types |
|---|---|---|---|
| Essentiel ($3/mo) | 5 MB | 100 MB | Images, PDF, DOCX, TXT |
| Professionnel ($10/mo) | 15 MB | 250 MB | All standard office & media types |
| Suprême ($20/mo) | 50 MB | 5 GB | Unrestricted 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.Need help?
Contact Support