File-Uploader
File Uploader es un componente web construido con StencilJs que permite subir imágenes y videos cargando la vista previa del archivo.
Si deseas consultar la documentación de NPM, por favor visita este enlace file-uploader Component.
Objetivo
Proporcionar una herramienta del desarrollo web de carga de imágenes y videos adaptable a diferentes aplicaciones y configuraciones.
Instalación
Antes de comenzar, asegúrese de tener instalado Node.js y npm en su máquina. Estas herramientas son necesarias para instalar y administrar las dependencias del proyecto.
- Node.js: Asegúrate de tener Node.js instalado en tu sistema. Puedes descargarlo e instalarlo desde aquí.
node --version
- npm: npm (Node Package Manager) generalmente se instala junto con Node.js. Verifica la instalación de npm con el siguiente comando:
npm -v
Una vez confirmado lo anterior, instala el paquete utilizando npm:
npm install @jaak.ai/file-uploader
Código Muestra
<file-uploader
config={{
placeholder: "Selecciona un documento",
buttonText: "Subir un documento",
accept: "image/*",
description: "Selecciona un archivo para continuar con el proceso",
size: 5000
}}
onComponentError={(event) => handleComponentError(event.detail)}
></file-uploader>
Configuración
El componente puede ser configurado con múltiples opciones para adaptarse a las necesidades específicas de tu aplicación. Las propiedades incluyen el tamaño máximo del archivo, el tipo de archivos permitidos, el texto y la descripción mostrados en la interfaz, así como el modo de operación, entre otros:
Propiedad | Tipo | Descripción |
---|---|---|
size | string | Tamaño máximo permitido del archivo en kilobytes. Valor por defecto: 5000. |
accept | string | Tipo de archivos permitidos. Por ejemplo: image/ video/ |
description | boolean | Descripción mostrada cerca de la entrada de archivo. |
buttonText | string | Texto mostrado en el botón de carga. |
placeholder | string | Texto del marcador de posición para la entrada de archivo. |
mode | string | Modo operativo, ya sea "drag and drop" o solo "button". |
Eventos
El FileUploaderComponent
emite varios eventos que pueden ser utilizados para responder a cambios de estado, errores y resultados de archivos. Estos incluyen componentError
, y result
.
Evento | Descripción |
---|---|
componentError | Emitido cuando ocurre un error en el componente. |
fileResult | Emitido con el resultado de la operación del archivo. |
Interfaces
FileUploaderResult Interface
Interface
La interfaz FileResult
proporciona información detallada sobre el resultado de una operación de archivo:
Propiedad | Tipo | Descripción |
---|---|---|
base64 | string | Cadena codificada en Base64 del contenido del archivo. |
type | string | Tipo MIME del archivo (opcional). |
filename | string | Nombre original del archivo (opcional). |
size | number | Tamaño del archivo en bytes (opcional). |
sizeDescription | string | Descripción del tamaño en KB, MB, etc. del archivo seleccionado. |
pngBase64 | string | Cadena codificada en Base64 del contenido del archivo, para archivos que no tienen una previsualización nativa en el navegador como tif o tiff. |
Error Interface
Interface
Cuando el componente falla, genera un error con los siguientes detalles de la interfaz:
Propiedad | Tipo | Descripción |
---|---|---|
label | string | Etiqueta que describe el error. |
code | string | Código identificador del error. |
details | any | Información adicional sobre el error. |
Métodos
El componente ofrece varios métodos para interactuar con él:
- selectFileHandler(): Abrir el diálogo para seleccionar un archivo.
- onRemovedSelected(): Eliminar el archivo seleccionado.
Ejemplos
Revisa las diferentes implementaciones paso a paso y nuestra implementación web de JavaScript en codepen.io.

JS
Ejemplo HTML and JavaScript
Utilizando node, y una vez que el paquete file-uploader
se encuentra instalado:
- Crea un archivo HTML
Crea un archivo HTML (por ejemplo, index.html). Copia y pega el siguiente código en el archivo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>File Uploader Example</title>
<script type="module" src="https://unpkg.com/@jaak.ai/file-uploader"></script>
</head>
<body>
<!-- Incluir el componente File Uploader -->
<file-uploader id="fileUploader"></file-uploader>
<script type="module">
// Seleccionar el componente file-uploader
const fileUploader= document.getElementById('fileUploader');
// Configurar el componente con los ajustes iniciales
fileUploader.config = {
placeholder: 'Upload your image',
buttonText: 'Upload File',
accept: 'image/*',
description: 'Please upload an image',
size: 2048, // Tamaño máximo del archivo en kilobytes
};
// Manejar errores
fileUploader.addEventListener('componentError', event => {
console.error('Error event:', event.detail);
// Mostrar mensajes de error al usuario
});
// Manejar resultados de archivos
fileUploader.addEventListener('result', event => {
console.log('File result event:', event.detail);
// Procesar el resultado del archivo, por ejemplo, mostrar la imagen o video
});
// Agregar más lógica de funcionalidad o interacción según sea necesario
</script>
</body>
</html>
- Despliega el archivo HTML
Usa un servidor web estático para servir el archivo HTML. Por ejemplo, puedes usar live-server:
npm install -g live-server
live-server
Navega a la URL proporcionada por live-server para ver tu página en acción.
ReactJS
Ejemplo ReactJS
- Configurar un proyecto React
Si no tienes un proyecto React, crea uno nuevo:
npx create-react-app file-uploader-example
cd file-uploader-example
- Instalar el paquete @jaak.ai/file-uploader
npm install @jaak.ai/file-uploader
- Crear el componente FileUploader
Crea un archivo llamado FileUploader.js dentro de la carpeta src
. Copia y pega el siguiente código en FileUploader.js:
import React, { useState, useEffect } from 'react';
import { defineCustomElements } from '@jaak.ai/file-uploader/loader';
const FileUploader = () => {
const [error, setError] = useState(null);
const [fileResult, setFileResult] = useState(null);
useEffect(() => {
defineCustomElements(window);
}, []);
const handleError = (event) => {
setError(event.detail);
};
const handleFileResult = (event) => {
setFileResult(event.detail);
};
return (
<div>
<file-uploader
id="fileUploader"
onComponentError={handleError}
onResult={handleFileResult}
config={JSON.stringify({
placeholder: 'Upload your image',
buttonText: 'Upload File',
accept: 'image/*',
description: 'Please upload an image',
size: 2048
})}
></file-uploader>
<div>Error: {error && error.label}</div>
<div>File Result: {fileResult && fileResult.base64}</div>
</div>
);
};
export default FileUploader;
- Usa el componente FileUploader
Abre el archivo src/App.js y modifica el contenido para incluir el componente FileUploader:
import React from 'react';
import FileUploader from './FileUploader';
function App() {
return (
<div className="App">
<FileUploader />
</div>
);
}
export default App;
- Iniciar la aplicación de React
npm run start
Abre tu navegador y navega a http://localhost:3000
para ver tu componente en acción.
Angular
Ejemplo Angular
- Configurar un proyecto Angular
Si no tienes un proyecto Angular, crea uno nuevo:
ng new file-uploader-example
cd file-uploader-example
- Instalar el paquete @jaak.ai/file-uploader
npm install @jaak.ai/file-uploader
- Crear el componente FileUploader
⚠️ IMPORTANTE si está usando en la configuración(tsconfig) JSX con el valor “jsx-react“, tambien se debe declarar los HTML tags desde el index.ts
declare global {
namespace JSX {
interface IntrinsicElements {
'video-camera-recorder': React.DetailedHTMLProps\<
React.HTMLAttributes<HTMLElement>,
HTMLElement
>;
}
}
}
Abre el archivo src/app/app.component.ts y modifícalo con el siguiente contenido:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<file-uploader
(componentError)="handleError($event)"
(result)="handleFileResult($event)"
[config]="config">
</file-uploader>
<div>Error: {{ error?.details }}</div>
<div>File Result: {{ fileResult?.base64 }}</div>
`
})
export class AppComponent implements OnInit {
status: string;
error: any;
fileResult: any;
config = {
placeholder: 'Upload your image',
buttonText: 'Upload File',
accept: 'image/*',
description: 'Please upload an image',
size: 2048
};
ngOnInit(): void {
// Registro de elementos personalizados o cualquier lógica de inicialización
}
handleError(event: CustomEvent) {
this.error = event.detail;
}
handleFileResult(event: CustomEvent) {
this.fileResult = event.detail;
}
}
- Configurar angular.json
Asegúrate de que tu archivo angular.json incluya el script necesario para cargar el componente de Stencil. Agrega lo siguiente bajo la sección de scripts:
"scripts": [
"node_modules/@jaak.ai/file-uploader/dist/file-uploader/file-uploader.js"
]
- Iniciar la aplicación Angular
ng serve
Abre tu navegador y navega a http://localhost:4200
para ver tu componente en acción.
Updated about 2 months ago