Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Crear una vista previa de la imagen antes de cargar
  • Transformaciones
  1. React

Carga de Imágenes

PreviousReact RouterNextTesting

Last updated 2 years ago

Existen dos formas de cargar imágenes desde nuestra aplicación de React:

  • Enviar la imagen a un backend para cargarla a un servicio de almacenamiento como , Dropbox o S3.

  • Enviar la imagen directamente al servicio de almacenamiento (aunque para algunos servicios como S3 necesitamos un backend para generar un token).

En esta guía vamos a ver cómo cargar archivos directamente a sin necesidad de pasar por el backend.

Nota: , aunque es posible que alguien copie el código y utilice nuestra cuenta para subir imágenes, en la práctica esto no es muy común que ocurra. Si esto es una preocupación sería mejor o . En esta guía vamos a hacer la carga directa.

Para continuar necesitas una cuenta en y obtener los siguientes datos que encontrarás en el Dashboard (una vez ingreses a tu cuenta):

  • El Cloud Name.

  • El API Key.

También necesitas habilitar las cargas no firmadas en la configuración creando un .

Para cargar una imagen a Cloudinary necesitas realizar dos pasos:

  1. Agregar el campo tipo "file" y almacenar el archivo en el estado del componente.

  2. Agregar un botón que cargue el archivo a Cloudinary.

Para el primer paso podemos agregar el campo de la siguiente manera:

function App() {
  const [file, setFile] = useState(null);

  return (
    <>
      <input type="file" onChange={(e) => setFile(e.target.files[0])}></input>
    </>
  )
}
function App() {
  const [file, setFile] = useState(null);

  const CLOUD_NAME = "CLOUD_NAME"
  const UPLOAD_PRESET = "UPLOAD_PRESET"

  const upload = async () => {
    const data = new FormData();
    data.append("file", file);
    data.append("upload_preset", CLOUD_NAME);
    const response = await fetch(`https://api.cloudinary.com/v1_1/${UPLOAD_PRESET}/upload`, 
        { method: "POST", body: data })
    const data = await response.json()
    console.log(data) // reemplazar con un mensaje de éxito o la acción deseada
  };

  return (
    <div className="App">
      <input type="file" onChange={(e) => setFile(e.target.files[0])}></input>
      <button onClick={upload}>Upload</button>
    </div>
  );
}

Crear una vista previa de la imagen antes de cargar

Es posible crear una vista previa de la imagen utilizando el método URL.createObjectURL:

function App() {
  const [file, setFile] = useState(null)

  // ...

  return (
    <input type="file" onChange={(e) => setFile(e.target.files[0])}></input>
    { file ? <img alt="Preview" height="60" src={URL.createObjectURL(file)} /> : null }
    ...
  )
}

Transformaciones

Una funcionalidad muy interesante de Cloudinary es que podemos realizar transformaciones a nuestras imágenes. Estas transformaciones son procesadas en los servidores de Cloudinary y tienen un costo (después de un generoso plan gratuito).

Algunas transformaciones posibles son las siguientes:

  • Tamaño (escalar, limitar, llenar, cortar, etc.)

  • Ubicar texto u otras imágenes como marcas de agua.

  • Efectos, filtros y otras mejoras artísticas.

  • Detección de caras.

La forma más fácil de realizar transformaciones es enviarlas como parte el URL de la imagen. Por ejemplo, si tenemos una imagen llamada sample.jpg podemos cambiar el tamaño a un ancho de 100px con la siguiente URL:

https://res.cloudinary.com/<cloud_name>/c_crop,w_100/sample.jpg

Nota: No olvides reemplazar <cloud_name> por el valor real.

Ahora agregamos el botón y una función que va a cargar el archivo a . El ejemplo completo quedaría de la siguiente forma:

Para más información sobre la carga de imágenes en te recomendamos .

Cloudinary
Cloudinary
Según Cloudinary
cargar la imagen desde el backend
generar una firma de autenticación desde el backend
Cloudinary
Upload Preset como se explica en esta sección de la documentación
Cloudinary
Cloudinary
la documentación oficial