Saltar al contenido

¿Cómo puedo subir una foto con Expo?

Después de indagar en varios repositorios y sitios webs finalmente hemos descubierto la solución que te enseñamos aquí.

Solución:

Usa la Expo ImagePicker API para mostrar la cámara o el carrete de la cámara y recuperar información sobre la imagen seleccionada:

async function takeAndUploadPhotoAsync() 
  // Display the camera to the user and wait for them to take a photo or to cancel
  // the action
  let result = await ImagePicker.launchCameraAsync(
    allowsEditing: true,
    aspect: [4, 3],
  );

  if (result.cancelled) 
    return;
  

  // ImagePicker saves the taken photo to disk and returns a local URI to it
  let localUri = result.uri;
  let filename = localUri.split('/').pop();

  // Infer the type of the image
  let match = /.(w+)$/.exec(filename);
  let type = match ? `image/$match[1]` : `image`;

  // Upload the image using the fetch and FormData APIs
  let formData = new FormData();
  // Assume "photo" is the name of the form field the server expects
  formData.append('photo',  uri: localUri, name: filename, type );

  return await fetch(YOUR_SERVER_URL, 
    method: 'POST',
    body: formData,
    headers: 
      'content-type': 'multipart/form-data',
    ,
  );

Para obtener un ejemplo más completo que incluye el código del servidor, consulte este repositorio: https://github.com/exponent/image-upload-example.

Los ejemplos oficiales usan Node.js, así es como con PHP:

Expo

async function takePhotoAndUpload() 

  let result = await ImagePicker.launchCameraAsync(
    allowsEditing: false, // higher res on iOS
    aspect: [4, 3],
  );

  if (result.cancelled) 
    return;
  

  let localUri = result.uri;
  let filename = localUri.split('/').pop();

  let match = /.(w+)$/.exec(filename);
  let type = match ? `image/$match[1]` : `image`;

  let formData = new FormData();
  formData.append('photo',  uri: localUri, name: filename, type );

  return await fetch('http://example.com/upload.php', 
    method: 'POST',
    body: formData,
    header: 
      'content-type': 'multipart/form-data',
    ,
  );

upload.php


import React,  Component  from 'react';
import 
  ActivityIndicator,
  Button,
  Clipboard,
  Image,
  Share,
  StatusBar,
  StyleSheet,
  Text,
  TouchableOpacity,
  View,
 from 'react-native';
import  Constants  from 'expo';
import * as Permissions from 'expo-permissions';
import * as ImagePicker from 'expo-image-picker';
export default class App extends Component 
  state = 
    image: null,
    uploading: false,
  ;

  render() 
    let 
      image
     = this.state;

    return (
      
        

        
          Example: Upload ImagePicker result
        

        

Reseñas y puntuaciones de la guía

Agradecemos que quieras patrocinar nuestra labor ejecutando un comentario y dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *