DEV Community

kouta222
kouta222

Posted on

Mastering Blob on the Web: A Practical Guide for Handling Files and Binary Data

Working with Blob in Web Development

As part of my internship, I recently started working with Blob in web development — and I was amazed at how powerful it is! This article is a hands-on guide to understanding and using Blob on the client side, covering everything from the basics to real-world use cases and performance tips.

1. What Is a Blob?

A Blob (Binary Large Object) is a data type used to represent binary data, such as files, images, or videos, on the client side — especially in JavaScript. It allows you to work with raw data flexibly and efficiently.

Here's a simple example of creating a Blob:

const data = new Uint8Array([72, 101, 108, 108, 111]); // Binary for "Hello"
const blob = new Blob([data], { type: 'text/plain' });
Enter fullscreen mode Exit fullscreen mode

2. Common Use Cases for Blob

a. File Uploads and Downloads

Blob is essential when handling file uploads in the browser. You can capture files from an <input type="file"> element like this:

const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (event) => {
  const file = event.target.files[0];
  console.log(file); // 'file' is already a Blob
});
Enter fullscreen mode Exit fullscreen mode

Blob also enables creating downloadable files on the client side:

const text = "Hello, world!";
const blob = new Blob([text], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'hello.txt';
link.click();
URL.revokeObjectURL(url); // Clean up when done
Enter fullscreen mode Exit fullscreen mode

b. Image and Video Previews

Want to preview an uploaded image or video? Use URL.createObjectURL() to turn a Blob into a temporary URL and assign it to an <img> or <video> tag:

const fileInput = document.querySelector('input[type="file"]');
const preview = document.querySelector('#preview');
fileInput.addEventListener('change', (event) => {
  const file = event.target.files[0];
  const url = URL.createObjectURL(file);
  preview.src = url;
  // Optional cleanup after use:
  preview.onload = () => URL.revokeObjectURL(url);
});
Enter fullscreen mode Exit fullscreen mode

c. Web Workers and Dynamic Scripts

Blob can even be used to create dynamic scripts for Web Workers, which let you run heavy tasks without blocking the main UI thread:

const blob = new Blob([`
  onmessage = function(e) {
    postMessage('Received: ' + e.data);
  }
`], { type: 'application/javascript' });
const worker = new Worker(URL.createObjectURL(blob));
worker.postMessage('Hello, Worker!');
worker.onmessage = function(e) {
  console.log(e.data);
};
Enter fullscreen mode Exit fullscreen mode

3. Optimizing Performance

When working with large datasets, it's important to manage performance and memory carefully.

a. Manage Memory

Blob URLs consume memory, so always clean them up when no longer needed:

const url = URL.createObjectURL(blob);
// Use the URL...
URL.revokeObjectURL(url); // Free up memory
Enter fullscreen mode Exit fullscreen mode

b. Use Streams for Large Data

For very large files, consider breaking data into chunks or using streaming APIs like ReadableStream and WritableStream to avoid memory overload.

4. Keep Security in Mind

While Blob is powerful, it also comes with security responsibilities:

  • Always validate and sanitize uploaded files to prevent malware risks.
  • Implement a Content Security Policy (CSP) to reduce XSS risks. For example:
Content-Security-Policy: script-src 'self'; object-src 'none';
Enter fullscreen mode Exit fullscreen mode

Final Thoughts

Blob opens up a world of possibilities for handling files and binary data in web applications. Whether you're implementing file uploads, downloads, media previews, or background workers, Blob can be your go-to tool.

Let's keep pushing the boundaries and build awesome apps with Blob!

References

  • MDN Web Docs: Blob
  • Zenn: Working with Blob

Top comments (0)