How to upload an image using HTML and JavaScript in Firebase?

Firebase is a Google cloud platform that provides storage, database, and authentication services. In this tutorial, you'll learn how to upload images to Firebase Storage using HTML and JavaScript.

Firebase is a comprehensive cloud platform offering NoSQL databases, real-time hosting, authentication, push notifications, and file storage services for web and mobile applications.

Prerequisites

Before starting, you need to create a Firebase project and configure storage. Follow these steps to set up your Firebase project:

Firebase Project Setup

STEP 1 ? Visit the Firebase Console and click "Get started", then "Create a project".

STEP 2 ? Enter your project name and click "Continue".

STEP 3 ? Configure Google Analytics (optional) and click "Create project".

STEP 4 ? Once your project is ready, click "Continue" to access the Firebase console.

STEP 5 ? In your project dashboard, click the web icon (</>) to add Firebase to your web app.

STEP 6 ? Register your app with a nickname and copy the configuration code for later use.

STEP 7 ? From the left sidebar, go to "Build" ? "Storage".

STEP 8 ? Click "Get started" and choose "Start in test mode" for development purposes.

HTML Structure

Create a simple HTML interface with a file input and upload button:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Firebase Image Upload</title>
    <style>
        .container {
            max-width: 600px;
            margin: 50px auto;
            padding: 20px;
            text-align: center;
            font-family: Arial, sans-serif;
        }
        #photo {
            margin: 20px 0;
            padding: 10px;
        }
        #upload {
            background-color: #4CAF50;
            color: white;
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        #upload:hover {
            background-color: #45a049;
        }
        #status {
            margin-top: 20px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Firebase Image Upload</h1>
        <input type="file" id="photo" accept="image/*" />
        <br>
        <button id="upload" onclick="uploadImage()">Upload Image</button>
        <div id="status"></div>
        <img id="uploadedImage" style="max-width: 300px; margin-top: 20px; display: none;" />
    </div>

    <!-- Firebase SDKs -->
    <script src="https://www.gstatic.com/firebasejs/9.0.0/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/9.0.0/firebase-storage-compat.js"></script>
    
    <script>
        // Your Firebase configuration
        const firebaseConfig = {
            apiKey: "your-api-key",
            authDomain: "your-project.firebaseapp.com",
            projectId: "your-project-id",
            storageBucket: "your-project.appspot.com",
            messagingSenderId: "123456789",
            appId: "your-app-id"
        };

        // Initialize Firebase
        firebase.initializeApp(firebaseConfig);
        
        function uploadImage() {
            const fileInput = document.getElementById('photo');
            const statusDiv = document.getElementById('status');
            const uploadedImg = document.getElementById('uploadedImage');
            
            // Check if file is selected
            if (!fileInput.files[0]) {
                statusDiv.textContent = 'Please select an image first!';
                statusDiv.style.color = 'red';
                return;
            }
            
            const file = fileInput.files[0];
            
            // Validate file type
            if (!file.type.startsWith('image/')) {
                statusDiv.textContent = 'Please select a valid image file!';
                statusDiv.style.color = 'red';
                return;
            }
            
            // Show upload progress
            statusDiv.textContent = 'Uploading...';
            statusDiv.style.color = 'blue';
            
            // Create storage reference
            const storageRef = firebase.storage().ref();
            const fileName = Date.now() + '-' + file.name;
            const imageRef = storageRef.child('images/' + fileName);
            
            // Upload file
            const uploadTask = imageRef.put(file);
            
            // Monitor upload progress
            uploadTask.on('state_changed',
                (snapshot) => {
                    const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
                    statusDiv.textContent = `Upload progress: ${Math.round(progress)}%`;
                },
                (error) => {
                    console.error('Upload error:', error);
                    statusDiv.textContent = 'Upload failed: ' + error.message;
                    statusDiv.style.color = 'red';
                },
                () => {
                    // Upload completed successfully
                    uploadTask.snapshot.ref.getDownloadURL().then((downloadURL) => {
                        console.log('File available at:', downloadURL);
                        statusDiv.textContent = 'Image uploaded successfully!';
                        statusDiv.style.color = 'green';
                        
                        // Display uploaded image
                        uploadedImg.src = downloadURL;
                        uploadedImg.style.display = 'block';
                    });
                }
            );
        }
    </script>
</body>
</html>

How the Upload Process Works

The image upload process involves these key steps:

  1. File Selection ? User selects an image using the file input
  2. Validation ? Check if file exists and is a valid image format
  3. Storage Reference ? Create a reference to Firebase Storage with a unique filename
  4. Upload Task ? Use the put() method to upload the file
  5. Progress Monitoring ? Track upload progress and handle success/error states
  6. Download URL ? Retrieve the public URL of the uploaded image

Key Firebase Storage Methods

  • firebase.storage().ref() ? Creates a storage reference
  • ref.child(path) ? Creates a child reference for organizing files
  • ref.put(file) ? Uploads a file and returns an upload task
  • uploadTask.on() ? Monitors upload progress with callbacks
  • snapshot.ref.getDownloadURL() ? Gets the download URL after upload

Security Considerations

For production applications, configure proper Firebase Security Rules to control who can upload files:

// Firebase Storage Rules example
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /images/{allPaths=**} {
      allow read, write: if request.auth != null 
        && request.resource.size < 5 * 1024 * 1024  // 5MB limit
        && request.resource.contentType.matches('image/.*');
    }
  }
}

Conclusion

Firebase Storage provides a robust solution for handling image uploads with real-time progress tracking and secure file management. Remember to implement proper validation, error handling, and security rules for production applications.

Updated on: 2026-03-15T23:19:00+05:30

7K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements