File Upload Techniques Using HTML Forms

Traditional Form-Based File Upload

The most basic approach to file uploads uses standard HTML forms:

<form action="/upload-handler" method="post" enctype="multipart/form-data">
    <input type="file" name="fileUpload" />
    <button type="submit">Upload</button>
</form>

Key requiremnets:

  • POST method
  • enctype="multipart/form-data"
  • Input elements must have name attributes

Server-side handling (C# example):

public ActionResult ProcessUpload()
{
    if (Request.Files.Count > 0)
    {
        var uploadedFile = Request.Files[0];
        uploadedFile.SaveAs(Server.MapPath("~/Storage/") + uploadedFile.FileName);
        return Content("Upload successful");
    }
    return Content("No file received");
}

Asynchronous Upload with jQuery Form Plugin

For asynchronous uploads without page refresh:

// Initialize form
$('#asyncForm').ajaxForm({
    success: function(response) {
        console.log(response);
    }
});

// Manual submission
$(".manualSubmit").click(function() {
    $('#asyncForm').ajaxSubmit({
        success: function(response) {
            console.log(response);
        }
    });
});

FormData API for Modern Browsers

Using HTML5 FormData for direct file submission:

document.querySelector(".uploadButton").addEventListener("click", function() {
    const fileContainer = new FormData();
    fileContainer.append("fileData", document.querySelector("#fileInput").files[0]);
    
    fetch("/upload-endpoint", {
        method: "POST",
        body: fileContainer
    })
    .then(response => response.text())
    .then(result => console.log(result));
});

Chunked File Uploads

For handling large files:

function uploadInParts(file, chunkIndex) {
    const CHUNK_SIZE = 1000000;
    const endPosition = Math.min((chunkIndex + 1) * CHUNK_SIZE, file.size);
    const fileSegment = file.slice(chunkIndex * CHUNK_SIZE, endPosition);
    
    const payload = new FormData();
    payload.append("fileSegment", fileSegment);
    payload.append("originalName", file.name);
    
    fetch("/chunk-upload", {
        method: "POST",
        body: payload
    })
    .then(response => {
        if (file.size <= endPosition) {
            console.log("Upload complete");
            return;
        }
        uploadInParts(file, chunkIndex + 1);
    });
}

// Initiate upload
const selectedFile = document.querySelector("#multiFile").files[0];
uploadInParts(selectedFile, 0);

HTML5 Drag and Drop/Paste Upload

Drag and drop implementation:

document.querySelector(".dropZone").addEventListener("drop", function(event) {
    event.preventDefault();
    const droppedFiles = event.dataTransfer.files;
    
    const uploadPayload = new FormData();
    uploadPayload.append("uploadedFiles", droppedFiles[0]);
    
    fetch("/drop-upload", {
        method: "POST",
        body: uploadPayload
    });
});

Paste upload implementation:

document.querySelector(".pasteArea").addEventListener("paste", function(event) {
    event.preventDefault();
    const clipboardItem = event.clipboardData.items[0];
    
    if (clipboardItem.kind === 'file') {
        const pastedFile = clipboardItem.getAsFile();
        
        const uploadPayload = new FormData();
        uploadPayload.append("pastedImage", pastedFile);
        
        fetch("/paste-upload", {
            method: "POST",
            body: uploadPayload
        });
    }
});

WebUploader Plugin Implementation

Basic configuration:

const uploadHandler = WebUploader.create({
    server: '/upload-endpoint',
    pick: '#fileSelector'
});

document.querySelector("#startUpload").addEventListener("click", function() {
    uploadHandler.upload();
});

uploadHandler.on('uploadSuccess', function(file) {
    console.log("File uploaded successfully");
});

Chunked upload configuration:

const chunkedUploader = WebUploader.create({
    server: '/chunked-upload',
    chunked: true,
    chunkSize: 1000000,
    pick: '#chunkFileSelector'
});

Tags: FormData FileUpload jquery WebUploader ChunkedUpload

Posted on Sat, 22 Aug 2026 16:09:50 +0000 by echion