Subir un archivo
  1. base64hub
  2. Herramientas de archivos
  3. Base64 a archivo

Convertidor de Base64 a archivo

Pega una cadena Base64 de origen desconocido y la herramienta averigua qué archivo es a partir de sus primeros bytes, lo muestra y lo guarda con la extensión correcta. Todo se ejecuta en esta pestaña del navegador.

Gratis sin registro, sin límites Local no se sube nada Auto detecta más de 60 tipos de archivo Actualizado 27 oct 2026
Entrada –Salida –Tamaño –

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo decodificar Base64 a un archivo

  1. Pega la cadena en Base64 o data URI. Se admiten Base64 estándar y URL-safe, con o sin relleno, saltos de línea o comillas. Funciona una data URI completa y también un texto que la contenga: un url("data:…") de CSS, un src="data:…" de HTML o una imagen de Markdown. Para una cadena larga guardada en un archivo, usa Abrir archivo .txt o suéltalo en el cuadro.
  2. Lee la línea de estado bajo la entrada: si la entrada es válida, qué variante es (Standard o Base64URL), el tamaño decodificado y el tipo Detectado. Una data URI muestra además su tipo Declarado.
  3. Mira la vista previa y los tres campos que hay debajo. Nombre de archivo, Extensión y Tipo MIME se rellenan según la detección. Lo que escribas ahí se mantiene hasta que pulses Borrar.
  4. Pulsa Descargar archivo, o Copiar como data URI para recuperar los bytes como data:<MIME type>;base64,….

Ejemplo carga un archivo de prueba distinto en cada clic: PNG, PDF, ZIP, WAV, DOCX, JSON, gzip y SVG. Si sueltas un archivo que ya es binario, por ejemplo un PDF en lugar de un archivo de texto con su Base64, la herramienta te lo dice y enlaza con Archivo a Base64, que hace el camino inverso.

Por qué el archivo aparece como application/octet-stream

application/octet-stream significa «unos bytes, tipo desconocido». Acaba delante del Base64 por motivos corrientes. FileReader.readAsDataURL() de Chrome produce data:application/octet-stream;base64, para cualquier archivo cuyo tipo no conoce el navegador. Los sistemas de almacenamiento y exportación que guardan los bytes pero no el tipo etiquetan así todo. Algunas API declaran todos los adjuntos como octet-stream. Un visor que depende de la etiqueta se niega entonces a mostrar el archivo, y una descarga no recibe ninguna extensión útil.

Los propios bytes suelen identificar el formato: la mayoría de los formatos empiezan con una firma fija, y la herramienta comprueba más de 60. Algunas firmas son compartidas, así que la herramienta mira más adentro del archivo:

Primeros bytesEl Base64 empieza porPuede serCómo los distingue la herramienta
PK 03 04UEsDBZIP, DOCX, XLSX, PPTX, EPUB, ODT, ODS, JAR, APKNombres de entrada: word/, xl/, ppt/, la entrada mimetype, AndroidManifest.xml, META-INF/MANIFEST.MF
RIFFUklGRWebP, WAV, AVILas cuatro letras del byte 8
ftyp en el byte 4AAAA, por ejemplo AAAAIGZ0eXBMP4, M4A, MOV, 3GP, HEIC, AVIFLa marca de los bytes 8 a 11
OggST2dnUwOgg Vorbis, Opus, vídeo TheoraEl encabezado del códec en la primera página
1A 45 DF A3GkXfoWebM, MKVEl tipo de documento webm
D0 CF 11 E00M8R4KGxGuEDOC, XLS, PPT, MSG de Outlook, archivos de Office protegidos con contraseñaNo puede; indica «DOC/XLS/MSG (OLE)»

La lista completa de firmas está en prefijos Base64 habituales.

Cuando una data URI declara un tipo y el contenido no coincide, una nota lo indica, por ejemplo «La data URI indica application/octet-stream, pero el contenido parece PDF.», y se usa el tipo detectado. El tipo declarado solo se impone cuando la detección es débil: cuando los bytes parecen texto plano o binario desconocido.

Base64 dentro de Base64, codificación URL y gzip

Los datos que han pasado por varios sistemas suelen venir envueltos más de una vez. Tras decodificar, la herramienta comprueba si el resultado es otra capa y ofrece Decodificar de nuevo:

NotaQué ha pasado
«Los datos decodificados son a su vez texto Base64 (contenido: PDF).»Codificado dos veces, normalmente por dos capas de código que codificaron cada una «por si acaso»
«Los datos decodificados son Base64 codificado para URL»El Base64 se codificó con porcentajes para una URL (%2B, %2F, %3D) antes de volver a codificarse
«Los datos decodificados son una data: URI.»Alguien codificó la cadena data:… entera en lugar de su contenido
«Los datos están comprimidos con gzip: 817 B descomprimidos (PDF).»Comprimido antes de codificar para ahorrar espacio, algo habitual en logs y colas de mensajes; también se reconoce zlib

Decodificar de nuevo pone la capa interior en la entrada y la decodifica; Atrás vuelve a salir y recuerda hasta 20 pasos. Las notas de gzip y zlib solo aparecen después de que la herramienta haya descomprimido de verdad los datos, con resultados de hasta 16 MB. La vista previa de gzip muestra además el nombre original del archivo y la fecha de modificación guardados en el encabezado, con Guardar descomprimido para el contenido. Para contenido de texto, el decodificador Base64 gzip es la herramienta más directa.

Guardar con la extensión correcta

Windows y macOS eligen el programa según la extensión, así que un PDF guardado como decoded.bin parece roto aunque todos los bytes sean correctos. Los campos Extensión y Tipo MIME siguen a la detección hasta que escribes en ellos:

  • El nombre de archivo sale de un parámetro name= o filename= de una data URI, o del nombre del archivo de texto que abriste, sin su terminación .txt o .b64: report.pdf.b64.txt se guarda como report.pdf.
  • Si sabes que un archivo OLE es una hoja de cálculo, escribe xls en Extensión; la herramienta no distingue DOC, XLS y MSG.
  • Un Tipo MIME que introduzcas también vuelve a generar la vista previa de ese tipo. Si la herramienta dice Binary pero esperas audio, escribir audio/ogg hace que pruebe el reproductor de audio.
  • El tipo MIME solo afecta a la descarga y a Copiar como data URI; un archivo en el disco no tiene tipo MIME, solo sus bytes y su nombre.

Qué muestra la vista previa

Cada resultado indica el tipo, el tipo MIME, la extensión, el tamaño y un hash SHA-256, con Mostrar volcado hex para los primeros 512 bytes. Con datos binarios desconocidos, el volcado hex aparece abierto desde el principio. Según el tipo:

TipoVista previa
ImágenesLa imagen y su tamaño en píxeles; HEIC, TIFF y JPEG XL suelen recibir una nota de «no puede mostrar» porque la mayoría de navegadores no tienen decodificador. Consulta Base64 a imagen.
PDFEl visor de PDF de tu navegador, la versión, el número de páginas y el título. Consulta Base64 a PDF.
Audio y vídeoUn reproductor con la duración y el tamaño del vídeo
FuentesTexto de ejemplo editable con la fuente decodificada, con familia, estilo y número de glifos
ZIP, DOCX, XLSX, PPTX, EPUBLa lista de entradas con Ver y Guardar para cada archivo, más el texto del documento en archivos de Office y libros electrónicos. Consulta Base64 a ZIP.
TextoJuego de caracteres, líneas, JSON formateado, una tabla para CSV, el elemento raíz en XML, HTML en sandbox
Certificados y clavesUn enlace al decodificador de certificados

Detectar el tipo MIME de un Base64 en código

Veinticuatro caracteres de Base64 se decodifican en 18 bytes, suficientes para las firmas más comunes. Esto funciona en navegadores y en Node.js 16 o posterior:

function sniffMime(b64) {
  const head = b64.replace(/^data:[^,]*,/, "").replace(/\s+/g, "").slice(0, 24)
    .replace(/-/g, "+").replace(/_/g, "/");
  const b = Uint8Array.from(atob(head), (c) => c.charCodeAt(0));
  const str = (start, len) => String.fromCharCode(...b.subarray(start, start + len));

  if (str(0, 5) === "%PDF-") return "application/pdf";
  if (str(0, 8) === "\x89PNG\r\n\x1a\n") return "image/png";
  if (b[0] === 0xff && b[1] === 0xd8 && b[2] === 0xff) return "image/jpeg";
  if (str(0, 4) === "GIF8") return "image/gif";
  if (str(0, 4) === "RIFF" && str(8, 4) === "WEBP") return "image/webp";
  if (str(0, 4) === "RIFF" && str(8, 4) === "WAVE") return "audio/wav";
  if (str(4, 4) === "ftyp") return "video/mp4"; // also M4A, MOV, HEIC: see bytes 8-11
  if (str(0, 4) === "PK\x03\x04") return "application/zip"; // also DOCX, XLSX, PPTX
  if (b[0] === 0x1f && b[1] === 0x8b) return "application/gzip";
  if (str(0, 3) === "ID3" || (b[0] === 0xff && (b[1] & 0xe6) === 0xe2)) return "audio/mpeg";
  return "application/octet-stream";
}

sniffMime("data:application/octet-stream;base64,JVBERi0xLjcKJeLjz9MK"); // "application/pdf"

En la línea de comandos, file lee los bytes decodificados desde la entrada estándar:

base64 -d payload.b64 | file -b --mime-type -

Con un PDF imprime application/pdf. Si decodificas con OpenSSL, añade -A para una cadena en una sola línea. Sin esa opción, openssl base64 -d no escribe nada y no avisa cuando la línea no tiene salto de línea final o es demasiado larga (1.024 caracteres o más en OpenSSL 3.5). Más en Base64 en JavaScript y Base64 en Bash.

Preguntas frecuentes

¿Cómo sé el tipo MIME de una cadena Base64?

Decodifica los primeros bytes y compáralos con firmas de archivo conocidas: JVBERi0 se decodifica en %PDF- e iVBORw0KGgo en la firma de PNG. Esta página lo hace con más de 60 formatos, y la función de JavaScript de esta página cubre los más comunes en tu propio código.

¿Qué significa «cannot display the file as application/octet-stream»?

application/octet-stream es la etiqueta genérica para bytes de tipo desconocido, así que un visor que se fía de la etiqueta no tiene nada en qué basarse. Pega aquí la misma cadena: se examina el contenido en lugar de la etiqueta, y la extensión y el tipo MIME se rellenan solos.

¿Qué puedo hacer si no se detecta el tipo?

En ese caso la vista previa muestra Binary con un volcado hex de los primeros 512 bytes. Si conoces el formato, escribe la extensión y el tipo MIME antes de descargar; el tipo MIME también cambia la vista previa, así que con audio/ogg la herramienta intenta reproducir los bytes.

¿Qué tamaño de archivo puedo decodificar?

No hay un límite fijo; el límite es la memoria de tu dispositivo. Por encima de unos 50 MB de Base64 la página se detiene un momento mientras decodifica, y Copiar como data URI se desactiva con archivos de más de 32 MB.

¿Se sube el archivo a algún sitio?

No. La decodificación, la detección del tipo y la vista previa se ejecutan en tu navegador, y la Content Security Policy de la página le impide hacer peticiones de red, salvo las del contador de visitas de Cloudflare.