더북(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로 인코딩된 데이터를 업로드합니다.