Base64 File Encoder
모든 파일을 Base64로 인코딩 — PDF, ZIP, 이미지 등
파일을 여기에 드래그하거나 클릭하여 업로드
모든 파일 형식 지원: PDF, ZIP, 이미지, 바이너리 파일
Base64 파일 인코딩이란?
Base64 파일 인코딩은 PDF, ZIP, 이미지, 실행 파일, 폰트, 오디오 등 바이너리 파일을 RFC 4648에 정의된 알파벳을 사용해 순수 ASCII 텍스트로 변환합니다. 바이너리 입력 3바이트마다 4개의 Base64 문자가 생성되며, 그 결과는 텍스트 전용 채널인 JSON API 페이로드, XML 문서, 이메일 본문, HTML 속성, 환경 변수 등을 통해 안전하게 전송할 수 있습니다.
문자열을 대상으로 하는 텍스트-Base64 인코딩과 달리, 파일-Base64 인코딩은 파일 형식에 관계없이 원시 바이트 스트림을 그대로 읽습니다. PDF의 바이너리 헤더, ZIP의 압축 블록, PNG의 픽셀 데이터 모두 동일하게 처리됩니다 — 옥텟(octet) 시퀀스로서 재인코딩됩니다. 결과물은 항상 유효한 ASCII이며, 인쇄 가능한 문자를 허용하는 어디서든 안전하게 삽입할 수 있습니다.
단점은 크기입니다. Base64 출력은 원본 바이너리보다 약 33% 더 큽니다. 1 MB PDF라면 약 1.33 MB의 Base64 텍스트가 됩니다. 이 오버헤드는 8비트 바이트를 6비트 문자로 표현하는 데서 오는 본질적인 비용이며, 어떤 구현으로도 피할 수 없습니다. 그럼에도 Base64 파일 인코딩은 MIME(RFC 2045), 데이터 URI(RFC 2397), JSON Web Token(RFC 7519)에 걸쳐 명시된, 텍스트 전용 형식에 바이너리 데이터를 삽입하는 표준 방법으로 남아 있습니다.
이 Base64 파일 인코더를 사용하는 이유
이 도구는 브라우저에서 FileReader API를 사용해 직접 파일을 Base64로 인코딩합니다. 파일이 서버에 업로드되지 않으며, 전체 변환이 JavaScript로 클라이언트 측에서 이루어집니다.
Base64 파일 인코딩 활용 사례
Base64 파일 크기 오버헤드
Base64 인코딩은 데이터 크기를 정확히 1/3 증가시킵니다. 입력 3바이트마다 4개의 출력 문자(각각 6비트를 표현)가 생성됩니다. 입력 길이가 3의 배수가 아닐 경우 패딩 문자(=)가 추가됩니다. 아래 표는 원본 파일 크기와 인코딩된 출력 크기의 관계를 보여줍니다.
| 파일 크기 | 원시 바이트 | Base64 바이트 | 오버헤드 |
|---|---|---|---|
| 1 KB | 1,024 B | 1,368 B | +33.3% |
| 10 KB | 10,240 B | 13,656 B | +33.4% |
| 100 KB | 102,400 B | 136,536 B | +33.3% |
| 1 MB | 1,048,576 B | 1,398,104 B | +33.3% |
| 5 MB | 5,242,880 B | 6,990,508 B | +33.3% |
| 10 MB | 10,485,760 B | 13,981,016 B | +33.3% |
데이터 URI 및 MIME 타입 참조
데이터 URI는 data:[MIME 타입];base64,[인코딩된 데이터] 형식을 사용해 파일 내용을 HTML, CSS, JavaScript에 직접 삽입합니다. MIME 타입은 브라우저에게 디코딩된 바이트를 어떻게 해석할지 알려줍니다. 아래는 일반적인 파일 확장자, MIME 타입, 그리고 해당 데이터 URI 접두사입니다.
| 확장자 | MIME 타입 | 데이터 URI 접두사 |
|---|---|---|
| application/pdf | data:application/pdf;base64,... | |
| .zip | application/zip | data:application/zip;base64,... |
| .png | image/png | data:image/png;base64,... |
| .jpg | image/jpeg | data:image/jpeg;base64,... |
| .gif | image/gif | data:image/gif;base64,... |
| .svg | image/svg+xml | data:image/svg+xml;base64,... |
| .woff2 | font/woff2 | data:font/woff2;base64,... |
| .mp3 | audio/mpeg | data:audio/mpeg;base64,... |
| .wasm | application/wasm | data:application/wasm;base64,... |
| .bin | application/octet-stream | data:application/octet-stream;base64,... |
코드 예제
아래 실행 가능한 예제는 JavaScript, Python, Node.js, bash, Go에서 바이너리 파일을 읽고 Base64로 인코딩하는 방법을 보여줍니다. 각 코드는 패딩이 포함된 표준 Base64(RFC 4648 섹션 4)를 출력합니다.
// Read a file from an <input> element and encode to Base64
const input = document.querySelector('input[type="file"]')
input.addEventListener('change', (e) => {
const file = e.target.files[0]
const reader = new FileReader()
reader.onload = () => {
const base64 = reader.result.split(',')[1]
console.log(base64) // → "JVBERi0xLjQK..." (raw Base64, no data URI prefix)
}
reader.readAsDataURL(file)
})
// Convert a Blob to Base64 with async/await
async function blobToBase64(blob) {
const buffer = await blob.arrayBuffer()
const bytes = new Uint8Array(buffer)
let binary = ''
bytes.forEach(b => binary += String.fromCharCode(b))
return btoa(binary) // → standard Base64 string
}import base64
from pathlib import Path
# Encode a file to Base64
file_bytes = Path('document.pdf').read_bytes()
encoded = base64.b64encode(file_bytes).decode('ascii')
print(encoded[:40]) # → "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PA..."
# Write encoded output to a text file
Path('document.b64.txt').write_text(encoded)
# Build a data URI from a file
mime_type = 'application/pdf'
data_uri = f'data:{mime_type};base64,{encoded}'
print(data_uri[:60]) # → "data:application/pdf;base64,JVBERi0xLj..."import { readFileSync, writeFileSync } from 'fs'
// Encode a file to Base64
const buffer = readFileSync('archive.zip')
const base64 = buffer.toString('base64')
console.log(base64.length) // → 1398104 (for a ~1 MB file)
// Save Base64 output to a file
writeFileSync('archive.b64.txt', base64)
// Build a data URI
const mime = 'application/zip'
const dataUri = `data:${mime};base64,${base64}`# Encode a file to Base64 (macOS / Linux) base64 < document.pdf > document.b64.txt # Encode with no line wrapping (GNU coreutils) base64 -w 0 < document.pdf > document.b64.txt # Encode and copy to clipboard (macOS) base64 < image.png | pbcopy # Encode with OpenSSL (available everywhere) openssl base64 -in archive.zip -out archive.b64.txt # Pipe directly into curl for API upload base64 -w 0 < photo.jpg | curl -X POST -d @- https://api.example.com/upload
package main
import (
"encoding/base64"
"fmt"
"os"
)
func main() {
data, err := os.ReadFile("document.pdf")
if err != nil {
panic(err)
}
encoded := base64.StdEncoding.EncodeToString(data)
fmt.Println(len(encoded)) // → 1398104 (for a ~1 MB file)
// Write to file
os.WriteFile("document.b64.txt", []byte(encoded), 0644)
}