[KOD] JavaScript'te Base64
Modern tarayıcı API'leri ile Base64 kodlama ve kod çözme için pratik JavaScript örnekleri.
// TEMEL KODLAMA VE KOD ÇÖZME
JavaScript, Base64 işlemleri için yerleşik fonksiyonlar sağlar. btoa() ve atob() fonksiyonları temel kodlama ve kod çözme işlemlerini yapar:
Bu fonksiyonlar ASCII metin için harikadır, ancak Unicode karakterler için özel işlem gerektirir.
// Temel Base64 kodlama
const text = 'Hello World';
const encoded = btoa(text);
console.log(encoded); // SGVsbG8gV29ybGQ=
// Temel Base64 kod çözme
const decoded = atob(encoded);
console.log(decoded); // Hello World
// String'in geçerli Base64 olup olmadığını kontrol et
function isValidBase64(str) {
try {
return btoa(atob(str)) === str;
} catch (err) {
return false;
}
}
// UNICODE DESTEĞİ
Unicode dizeler için, önce UTF-8 baytlarına dönüştürmemiz gerekir. Modern tarayıcılar TextEncoder ve TextDecoder API'leri sağlar:
Bu yaklaşım emoji, uluslararası karakterler ve diğer Unicode içeriği doğru şekilde işler.
// Unicode güvenli Base64 kodlama
function encodeBase64(str) {
const encoder = new TextEncoder();
const bytes = encoder.encode(str);
const binary = String.fromCharCode(...bytes);
return btoa(binary);
}
// Unicode güvenli Base64 kod çözme
function decodeBase64(base64) {
const binary = atob(base64);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
const decoder = new TextDecoder();
return decoder.decode(bytes);
}
// Emoji ile örnek
const emoji = 'Hello 👋 World 🌍';
const encoded = encodeBase64(emoji);
const decoded = decodeBase64(encoded);
console.log(decoded); // Hello 👋 World 🌍
// DOSYA İŞLEME
Dosyaları Base64'e dönüştürmek, yükleme ve veri URI'leri için yaygındır. İstemci tarafı dosya işleme için FileReader API'sini kullanın:
Bu, HTML'e doğrudan gömülebilen veya API'lere gönderilebilen veri URI'leri oluşturur.
// Dosyayı Base64 veri URI'sine dönüştür
function fileToBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
reader.readAsDataURL(file);
});
}
// Dosya girdisi ile kullanım
document.getElementById('fileInput').addEventListener('change', async (e) => {
const file = e.target.files[0];
if (file) {
try {
const base64 = await fileToBase64(file);
console.log(base64);
// Sonuç: data:image/png;base64,iVBORw0KGgoAAAA...
} catch (error) {
console.error('Hata:', error);
}
}
});
// URL GÜVENLİ BASE64
Standart Base64, URL kodlaması gerektiren + ve / karakterlerini kullanır. URL güvenli Base64 bunları - ve _ ile değiştirir:
Bu, tokenlar, ID'ler ve URL'ler aracılığıyla iletilen diğer veriler için gereklidir.
// URL güvenli Base64'e dönüştür
function toUrlSafeBase64(base64) {
return base64
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
// URL güvenli Base64'ten dönüştür
function fromUrlSafeBase64(urlSafeBase64) {
let base64 = urlSafeBase64
.replace(/-/g, '+')
.replace(/_/g, '/');
// Gerekirse dolgu ekle
const padding = 4 - (base64.length % 4);
if (padding !== 4) {
base64 += '='.repeat(padding);
}
return base64;
}
// Örnek
const text = 'URL-safe encoding test';
const encoded = btoa(text);
const urlSafe = toUrlSafeBase64(encoded);
console.log(urlSafe); // VVJMLXNhZmUgZW5jb2RpbmcgdGVzdA
// BÜYÜK VERİ AKIŞI
Büyük dosyalar veya veri akışları için, bellek sorunlarını önlemek için parçalar halinde işleyin:
Bu yaklaşım tarayıcı donmasını önler ve büyük veri kümelerini verimli şekilde işler.
// Akış tabanlı Base64 kodlama
class Base64Encoder {
constructor() {
this.buffer = '';
}
encode(chunk) {
this.buffer += chunk;
const completeBytes = Math.floor(this.buffer.length / 3) * 3;
const toEncode = this.buffer.slice(0, completeBytes);
this.buffer = this.buffer.slice(completeBytes);
return btoa(toEncode);
}
flush() {
if (this.buffer.length > 0) {
const result = btoa(this.buffer);
this.buffer = '';
return result;
}
return '';
}
}
// Kullanım
const encoder = new Base64Encoder();
let result = '';
result += encoder.encode('First chunk');
result += encoder.encode(' Second chunk');
result += encoder.flush();
console.log(result);
// HATA İŞLEME
Base64 işlemleri için her zaman uygun hata işleme uygulayın:
Sağlam hata işleme, uygulama çökmelerini önler ve daha iyi kullanıcı deneyimi sağlar.
// Hata işleme ile güvenli Base64 işlemleri
function safeEncode(input) {
try {
if (typeof input !== 'string') {
throw new Error('Girdi bir string olmalıdır');
}
return btoa(input);
} catch (error) {
console.error('Kodlama hatası:', error.message);
return null;
}
}
function safeDecode(base64) {
try {
// Base64 formatını doğrula
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {
throw new Error('Geçersiz Base64 formatı');
}
return atob(base64);
} catch (error) {
console.error('Kod çözme hatası:', error.message);
return null;
}
}
// Kullanım
const encoded = safeEncode('Hello World');
const decoded = safeDecode(encoded);
if (encoded && decoded) {
console.log('Başarılı:', decoded);
}