더북(TheBook)

components/SetupProfile.js

(...)
import storage from '@react-native-firebase/storage';

function SetupProfile() {
  (...)
  const [loading, setLoading] = useState(false);

const onSubmit = async () => {
  setLoading(true);

  let photoURL = null;

  if (response) {
    const asset = response.assets[0];
    const extension = asset.fileName.split('.').pop(); // 확장자 추출
    const reference = storage().ref(/profile/${uid}.${extension});

    if (Platform.OS === 'android') {
      await reference.putString(asset.base64, 'base64', {
        contentType: asset.type,
      });
    } else {
      await reference.putFile(asset.uri);
    }

    photoURL = response ? await reference.getDownloadURL() : null;
  }

  const user = {
    id: uid,
    displayName,
    photoURL,
  };

  createUser(user);
  setUser(user);
};

(...)

OS가 iOS냐 안드로이드냐에 따라 업로드 방식이 조금 다릅니다. iOS에서는 uri에서 파일을 불러와서 바로 업로드하고, 안드로이드에서는 putString을 통해 base64로 인코딩된 데이터를 업로드합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.