Upload de imagens no react native

 

Image for post

E ai galera, nesse artigo vou estar mostrando como realizar o upload de imagens no react native de forma prática, mas lembrando que irei apenas mostrar a parte do front que é no react native o back fica para um futuro artigo.

Primeiramente vamos criar o nosso projeto então abra seu terminal e execute o comando:

npx react-native init nome_do_projeto

lembrando que em nome_do_projeto você deverá inserir o nome do seu projeto.
Se tudo der certo você verá a seguinte mensagem em seu terminal:

Image for post

Então abra a pasta do seu projeto e execute o comando caso vá rodar para android:

npm android ou yarn android

E caso vá rodar para ios:

npm ios ou yarn ios

E você terá uma tela parecida com essa em seu emulador

Image for post

Nesse projeto para tratar a parte de upload iremos trabalhar com uma lib chamada react native image picker. Para instalar ele basta executar o comando.

npm i react-native-image-picker ou yarn add react-native-image-picker

Após a instalação será preciso incluir algumas configurações para que tenhamos permissão de acessar câmera, pastas locais…

Primeiro iremos realizar essa configuração no ios então no projeto acesse a pasta ios>nome_projeto>Info.plist e cole o código dentro da tag <dict>

<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) would like access to your photo gallery</string>
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) would like to use your camera</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) would like to save photos to your photo gallery</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) would like to use your microphone (for videos)</string>

E depois rode o comando para instalar as configurações:

pod install

E agora iremos realizar a configuração para android, então vá em android>app>src>main>AndroidManifest.xml e cole o código abaixo da permissão de internet

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Image for post

e execute novamente o comando para ver se está tudo ok

npm ios ou yarn ios

Então agora vá em app.js e remova o código de exemplo que já existe nele, e deixe ele assim:

Image for post

Copie e cole o código abaixo para adiantarmos a parte do layout:

<View style={styles.container}><Imagesource={{uri: avatar ? avatar.uri : 'https://image.shutterstock.com/image-vector/user-avatar-icon-sign-profile-260nw-1145752283.jpg'}}style={styles.avatar}/><TouchableOpacity style={styles.button} onPress={() => {})}><Text style={styles.buttonText}>Escolher imagem</Text></TouchableOpacity><TouchableOpacity style={styles.button} onPress={() => ()}><Text style={styles.buttonText}>Enviar imagem</Text></TouchableOpacity></View>const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',},button: {width: 150,height: 50,borderRadius: 3,justifyContent: 'center',alignItems: 'center',backgroundColor: '#7159c1',marginTop: 20,},buttonText: {color: '#fff',},avatar: {width: 100,height: 100,borderRadius: 50,}});

Nosso layout é basicamente um botão que fará o upload e um que enviaram a imagem para salvar e um local para exibir a imagem selecionada.

Com nosso layout construido poderemos partir para a etapa foco nosso artigo, vamos começar importando a biblioteca que instalamos.

import ImagePicker from 'react-native-image-picker';

E no evento onpress iremos adicionar a chamada da função, ao chamar o imagePicker temos 3 opções que podemos escolher:

  • LaunchCamera: é a chamada para inicializar a camera do usuário.
  • LaunchImageLibrary: é a chamada para inicializar a galeria de imagens do celular
  • showImagePicker: é a chamada que oferece as duas opções acima e da a opção de escolha para o usuário.

E para esse exemplo iremos usar o LaunchImageLibrary mas todas as 3 são bem parecidas na forma de tratamento. Essa função tem 2 parâmetros, a primeira um objeto para adicionar configurações , e a segunda uma função de callback e nosso onpress ficará dessa forma

onPress={() => ImagePicker.launchImageLibrary({}, callback)}

Para armazenar o retorno enviado para nossa função de callback iremos usar o useState então importe ele.

import React, { useState } from 'react';

e crie a variavel avatar e setAvatar

const [avatar, setAvatar] = useState();

E assim nova função de callback ficará dessa maneira

function callback(data) {  if(data.didCancel) {    return;  }  if(data.error) {
return;
}
if(!data.uri) {
return;
} setAvatar(data)}

Então agora para enviar tudo para o backend iremos criar a função upload e chamar ela no nosso segundo botão que ficará assim

<TouchableOpacity style={styles.button} onPress={() => upload()}>   <Text style={styles.buttonText}>     Enviar imagem   </Text></TouchableOpacity>

na nossa função de upload usaremos o FormData para carregar as informações do avatar e enviar para o nosso backend.

Oque é o FormData?

FormData fornece uma maneira fácil de construir um conjunto de pares chave/valor representando campos de um elemento f orm e seus valores, os quais podem ser facilmente enviados utilizado o método send() do XMLHttpRequest.

E o nosso código ficará assim

function upload() {  const data = new FormData();  data.append('avatar', {    fileName: avatar.fileName,    uri: avatar.uri,    type: avatar.type  });}

E assim finalizamos nosso artigo, espero que gostem e qualquer dúvida comente aqui.

Link do repositório: https://github.com/THAYLLER/exemploUploadImg

Postar um comentário

0 Comentários