Base64をファイルにデコードする方法

Base64文字列をダウンロード可能なファイルに変換する方法を解説。JavaScript、Python、Node.jsでのBase64からバイナリへのデコード手順と実例を紹介します。

Decoding

詳細な説明

Base64をファイルにデコードする処理は、エンコードの逆です。Base64文字列を受け取り、生のバイナリバイトに変換し、そのバイト列をファイルとして書き出します。APIやデータベース、JSONペイロードを通じてBase64として送信されたファイルデータを受け取った際によく必要になります。

ブラウザでの処理(ダウンロードを実行):

function downloadBase64File(base64Data, fileName, mimeType) {
  const byteCharacters = atob(base64Data);
  const byteNumbers = new Array(byteCharacters.length);
  for (let i = 0; i < byteCharacters.length; i++) {
    byteNumbers[i] = byteCharacters.charCodeAt(i);
  }
  const byteArray = new Uint8Array(byteNumbers);
  const blob = new Blob([byteArray], { type: mimeType });
  const link = document.createElement("a");
  link.href = URL.createObjectURL(blob);
  link.download = fileName;
  link.click();
  URL.revokeObjectURL(link.href);
}

重要なステップは、デコードされた文字列をBlobに渡す前に Uint8Array に変換することです。デコードされた文字列を直接Blobコンストラクタに渡すと、UTF-8テキストとしてエンコードされ、バイナリデータが破損します。

Node.jsの場合:

const fs = require("fs");
const base64Data = "iVBORw0KGgo..."; // your Base64 string
const buffer = Buffer.from(base64Data, "base64");
fs.writeFileSync("output.png", buffer);

Pythonの場合:

import base64
with open("output.png", "wb") as f:
    f.write(base64.b64decode(encoded_string))

よくある注意点:

  • Base64文字列に data:image/png;base64, のようなdata URIプレフィックスが含まれている場合、デコード前にそのプレフィックスを削除する必要があります。カンマの後の部分のみが実際のBase64データです。
  • ディスクに書き込む際は常にバイナリ書き込みモード(Pythonでは "wb"、Node.jsではエンコーディングオプションなし)を使用してください。テキストモードでは一部のプラットフォームでファイルが破損します。
  • デコード後のファイルはサイズを確認し、開いて検証してください。破損したBase64文字列(途中で切れたものや不正な文字を含むもの)は、エラーを投げずに壊れたファイルを生成することがあります。

ユースケース

JSON形式でドキュメントデータをBase64エンコードして返すCRM APIから、PDF添付ファイルを復元する場合に使用します。

試してみる — Base64 Encoder

フルツールを開く