Cikgu Pangkalan64 untuk Pembangunan Frontend

Panduan komprehensif untuk memahami Pangkalan64 pengekodan, penyahkodan dan aplikasi praktikal dalam reka bentuk web moden.

Cuba Pangkalan64 Pengekodan/Penyahkodan

Apa yang Tepat Pangkalan64?

Pangkalan64 ialah skema pengekodan binari-ke-teks yang menukar data binari (seperti imej, fail atau bait mentah) kepada aksara ASCII. Penukaran ini membolehkan data binari dihantar dan disimpan dengan selamat dalam sistem yang direka untuk data teks sahaja—seperti protokol e-mel, HTML atau respons API.

Nama "Base64" berasal daripada penggunaan 64 aksara yang berbeza (A-Z, a-z, 0-9, '+' dan '/') untuk mewakili nilai binari. setiap satu Pangkalan64 aksara mengekod 6 bit data, menjadikannya cara yang cekap untuk mengendalikan kandungan perduaan dalam persekitaran tertumpu teks.

Tidak seperti penyulitan, Pangkalan64 bukan langkah keselamatan—ia semata-mata untuk pemformatan data. Sesiapa sahaja boleh menyahkod kandungan Base64 dengan alat asas, jadi ia tidak boleh digunakan untuk melindungi maklumat sensitif.

Set Aksara Base64

A
B
C
D
E
F
G
H
saya
J
K
L.
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
a
b
c
d
e
f
g
h
x
y
z
0
1
2
3
4
5
6
7
8
9
+
/

* “=" digunakan sebagai aksara padding untuk data yang tidak lengkap

Bagaimana Pangkalan64 Kerja Pengekodan?

  1. 1

    Tukar Data Perduaan kepada Bait 8-bit

    Proses bermula dengan data binari (cth., fail imej). Data ini dibahagikan kepada segmen 8-bit (1-bait), yang membentuk input mentah untuk Pangkalan64 pengekodan.

  2. 2

    Kumpulkan Bait ke dalam Ketulan 24-bit

    Sejak Pangkalan64 menggunakan aksara 6-bit, bait 8-bit dikumpulkan ke dalam ketulan 24-bit (3-bait). 24 bit boleh dibahagikan sama rata kepada empat segmen 6-bit (4 × 6 = 24).

  3. 3

    Tukar Segmen 6-bit kepada Aksara Base64

    Setiap segmen 6-bit ditukar kepada nilai perpuluhan (0–63). Nilai ini kemudiannya dipetakan kepada aksara yang sepadan daripada Pangkalan64 set aksara (cth., 0 = “A”, 1 = “B”, …, 63 = “/”).

  4. 4

    Tambah Padding untuk Potongan Tidak Lengkap

    Jika panjang data binari bukan gandaan 3 bait, bahagian akhir tidak akan lengkap. Pangkalan64 menggunakan aksara padding “=” untuk menunjukkan bait yang hilang (1 “=” untuk 1 bait yang hilang, 2 “=" untuk 2 bait yang hilang).

Contoh Pengekodan Base64: Teks "Hai!"

Langkah Data Input Perwakilan Perduaan Output Base64
1. Teks Mentah “Hai!”
2. Bait 8-bit (ASCII) H (72), i (105), ! (33) 01001000, 01101001, 00100001
3. Potongan 24-bit 72, 105, 33 010010000110100100100001
4. Bahagikan kepada Segmen 6-bit 010010, 000110, 100100, 100001
5. Tukarkan kepada Perpuluhan 18, 6, 36, 33
6. Peta kepada Aksara Base64 “Kulit”

Bahagian hadapan Pangkalan64 Kes Penggunaan

URL Data untuk Imej

Benamkan imej kecil (seperti ikon atau avatar) terus ke dalam HTML/CSS menggunakan Pangkalan64 URL data. Ini mengurangkan permintaan HTTP dan meningkatkan kelajuan pemuatan halaman untuk aset kecil.

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Icon">

Penghantaran Data Binari API

Hantar data binari (seperti fail atau PDF) melalui REST API dengan mengekodkannya ke Pangkalan64. Ini mengelakkan isu dengan rasuah data binari dalam muatan API berasaskan teks (mis., JSON).

{ "fileData": "JVBERi0xLjQKJeLjz9MNCjYgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlciAvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeAovRjEgMTAgVGYKMDAwLjEwNS4wMDAuMTAwCjAwMC4yOTkuMDAwLjAwMAo...", "fileName": "report.pdf" }

Kekangan Teks Cookie & LocalStorage

Simpan data binari kecil dalam kuki atau LocalStorage (yang hanya menyokong teks) dengan mengekodkannya Pangkalan64. Berguna untuk menyimpan pilihan pengguna atau aset kecil secara tempatan.

// Save Base64 data to LocalStorage
localStorage.setItem('userAvatar', 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA...');

Pengekodan Lampiran E-mel

Kebanyakan protokol e-mel (seperti SMTP) adalah teks sahaja. Pangkalan64 digunakan untuk mengekod lampiran e-mel (imej, dokumen) supaya ia boleh dihantar tanpa rasuah.

Content-Type: image/jpeg; name="photo.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="photo.jpg"

/9j/4AAQSkZJRgABAQEAZABkAAD/7QBsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA...

Pengekodan SVG Sebaris

Mengekodkan fail SVG ke Pangkalan64 untuk kegunaan sebaris dalam latar belakang CSS atau atribut HTML. Ini memudahkan pengurusan aset untuk grafik vektor kecil.

.icon {
  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJBMTAgMTAgMCAwIDEgMjIgMTJBMTAgMTAgMCAwIDEgMTIgMjJBMTAgMTAgMCAwIDEgMiAxMkExMCAxMCAwIDAgMSAxMiAyWiIgc3Ryb2tlPSIjMTY1REZGIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz4=');
}

Eksport Imej Kanvas

API Kanvas HTML5 menggunakan Pangkalan64 untuk mengeksport kandungan yang dilukis sebagai data imej (melalui toDataURL()). Ini membolehkan menyimpan karya seni atau tangkapan skrin yang dijana pengguna.

// Get Base64 data from Canvas
const canvas = document.getElementById('myCanvas');
const base64Image = canvas.toDataURL('image/png'); // "data:image/png;base64,iVBORw0KGgo..."

Bahagian hadapan Pangkalan64 Contoh Kod

Asas Pangkalan64 Pengekodan/Penyahkodan

Gunakan JavaScript terbina dalam btoa() (binary-to-ASCII) dan atob() (ASCII-to-binary) berfungsi untuk mudah Pangkalan64 operasi. Nota: Fungsi ini berfungsi dengan rentetan UTF-8.

// Encode text to Base64
function encodeToBase64(text) {
  // Encode UTF-8 to avoid issues with special characters
  const utf8Text = unescape(encodeURIComponent(text));
  return btoa(utf8Text);
}

// Decode Base64 to text
function decodeFromBase64(base64String) {
  const utf8Text = atob(base64String);
  return decodeURIComponent(escape(utf8Text));
}

// Example usage
const originalText = "Hello, Base64!";
const encodedText = encodeToBase64(originalText);
const decodedText = decodeFromBase64(encodedText);

console.log("Original:", originalText); // "Hello, Base64!"
console.log("Encoded:", encodedText);   // "SGVsbG8sIEJhc2U2NCE="
console.log("Decoded:", decodedText);   // "Hello, Base64!"

Kodkan Imej kepada Pangkalan64

Tukar fail imej (dipilih melalui input fail) kepada Pangkalan64 menggunakan API FileReader. Berguna untuk melihat pratonton imej sebelum memuat naik atau membenamkannya sebaris.

// Get elements from DOM
const fileInput = document.getElementById('image-upload');
const previewImage = document.getElementById('image-preview');
const base64Output = document.getElementById('image-base64');

// Handle file selection
fileInput.addEventListener('change', (e) => {
  const file = e.target.files[0];
  if (!file || !file.type.startsWith('image/')) {
    alert('Please select an image file!');
    return;
  }

  // Create FileReader to read the image
  const reader = new FileReader();
  
  // On load, get Base64 data
  reader.onload = (event) => {
    const base64Data = event.target.result;
    
    // Preview the image
    previewImage.src = base64Data;
    previewImage.style.display = 'block';
    
    // Show Base64 data (truncated for readability)
    const truncatedData = base64Data.length > 100 
      ? base64Data.substring(0, 100) + '...' 
      : base64Data;
    base64Output.textContent = truncatedData;
  };
  
  // Read the file as Base64
  reader.readAsDataURL(file);
});

Data Base64 (Dipenggal):

Pangkalan64 ke Blob (Muat Turun Fail)

Tukar Pangkalan64 data kembali ke Blob (objek besar binari) untuk mencipta fail yang boleh dimuat turun (cth., PDF, imej) dalam penyemak imbas.

// Convert Base64 to Blob
function base64ToBlob(base64Data, contentType = 'application/octet-stream') {
  // Extract Base64 data (remove "data:..." prefix if present)
  const base64WithoutPrefix = base64Data.startsWith('data:')
    ? base64Data.split(',')[1]
    : base64Data;
  
  // Decode Base64 to binary string
  const binaryString = atob(base64WithoutPrefix);
  const byteLength = binaryString.length;
  
  // Convert binary string to Uint8Array
  const uint8Array = new Uint8Array(byteLength);
  for (let i = 0; i < byteLength; i++) {
    uint8Array[i] = binaryString.charCodeAt(i);
  }
  
  // Create and return Blob
  return new Blob([uint8Array], { type: contentType });
}

// Trigger file download from Blob
function downloadBlobAsFile(blob, fileName) {
  // Create temporary URL for Blob
  const url = URL.createObjectURL(blob);
  
  // Create anchor element to trigger download
  const a = document.createElement('a');
  a.href = url;
  a.download = fileName;
  
  // Simulate click to start download
  document.body.appendChild(a);
  a.click();
  
  // Clean up
  document.body.removeChild(a);
  URL.revokeObjectURL(url);
}

// Example: Download Base64 PDF
const base64Pdf = "JVBERi0xLjQKJeLjz9MNCjYgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlciAvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeAovRjEgMTAgVGYKMDAwLjEwNS4wMDAuMTAwCjAwMC4yOTkuMDAwLjAwMAo...";
const pdfBlob = base64ToBlob(base64Pdf, 'application/pdf');
downloadBlobAsFile(pdfBlob, 'report.pdf');

Vue.js Pangkalan64 Komponen

Komponen Vue.js boleh guna semula untuk Pangkalan64 pengekodan/penyahkodan. Bersepadu dengan sistem kereaktifan Vue untuk kemas kini masa nyata.

<template>
  <div class="base64-converter">
    <h3 class="text-lg font-semibold mb-4">Vue Base64 Converter</h3>
    
    <!-- Input for text -->
    <div class="mb-4">
      <label class="block mb-2 text-sm font-medium">Enter Text:</label>
      <textarea 
        v-model="inputText" 
        class="w-full p-2 border rounded"
        rows="3"
        placeholder="Type text to encode..."
      ></textarea>
      <button 
        @click="encode"
        class="mt-2 px-4 py-1 bg-primary text-white rounded"
      >Encode to Base64</button>
    </div>
    
    <!-- Output for Base64 -->
    <div class="mb-4">
      <label class="block mb-2 text-sm font-medium">Base64 Result:</label>
      <textarea 
        v-model="base64Output" 
        class="w-full p-2 border rounded"
        rows="3"
        readonly
      ></textarea>
      <button 
        @click="decode"
        class="mt-2 px-4 py-1 bg-secondary text-white rounded"
      >Decode to Text</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      inputText: '',
      base64Output: ''
    };
  },
  methods: {
    encode() {
      if (!this.inputText) return;
      // Encode UTF-8 text to Base64
      const utf8Text = unescape(encodeURIComponent(this.inputText));
      this.base64Output = btoa(utf8Text);
    },
    decode() {
      if (!this.base64Output) return;
      // Decode Base64 to UTF-8 text
      const utf8Text = atob(this.base64Output);
      this.inputText = decodeURIComponent(escape(utf8Text));
    }
  }
};
</script>

Soalan Lazim Mengenai Pangkalan64

Mula Menggunakan Pangkalan64 dalam Projek Bahagian Hadapan Anda

Sama ada anda membenamkan imej, menghantar fail melalui API atau bekerja dengan kandungan yang dijana pengguna, Pangkalan64 ialah alat penting untuk pembangun web moden. Gunakan contoh kod di atas untuk menyepadukan Pangkalan64 pengekodan dan penyahkodan ke dalam projek anda yang seterusnya.