본문 바로가기
안드로이드 자바

[JAVA][Android] 안드로이드에서 URI를 전송 가능한 데이터 형태로 변환하기

by teamnova 2024. 9. 6.
728x90

안녕하세요

 

이번 포스팅에서는 URI를 바이트 배열과 Base64 문자열로 변환하는 방법을 설명하겠습니다.

 

안드로이드 앱 개발을 하다 보면, 갤러리에서 선택한 이미지나 파일을 서버에 전송하거나 다른 사용자와 공유해야 하는 경우가 있습니다.

이때 파일의 URI만 가지고 있다면, 이를 직접 전송할 수 없기 때문에 실제 파일 데이터를 전송 가능한 형태로 변환해야 합니다.

 

우선 URI 에 대해 간단하게 설명하면,

 

URI(Uniform Resource Identifier)는 특정 리소스의 위치를 나타내는 고유 식별자입니다. 안드로이드에서 URI는 파일이나 콘텐츠의 위치를 나타내며, 갤러리에서 이미지를 선택할 때 반환되는 값이 바로 URI입니다. 그러나 URI 자체는 파일의 데이터가 아니므로, 서버에 전송하거나 다른 사용자와 공유하려면 URI를 실제 데이터로 변환해야 합니다.

 


1. URI를 바이트 배열로 변환하기

private byte[] getBytesFromUri(Uri uri) throws IOException {
  InputStream inputStream = getContentResolver().openInputStream(uri);
  ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
  int bufferSize = 1024;
  byte[] buffer = new byte[bufferSize];

  int len;
  while ((len = inputStream.read(buffer)) != -1) {
    byteBuffer.write(buffer, 0, len);
  }

  return byteBuffer.toByteArray();
}

 

 

InputStream: URI로부터 InputStream을 생성하여 파일 데이터를 읽어옵니다.

 

ByteArrayOutputStream: 바이트 데이터를 메모리에 저장하기 위한 스트림입니다.

 

바이트 배열 생성: InputStream에서 데이터를 읽어와 ByteArrayOutputStream에 저장하고, 최종적으로 바이트 배열로 변환합니다.

 

바이트 배열은 전송 가능한 가장 기본적인 데이터 형태입니다.

이렇게 변환한 바이트 배열을 통해 서버로 데이터를 전송할 수 있습니다. 예를 들어, HTTP POST 요청을 통해 파일을 업로드할 때 이 바이트 배열을 사용합니다


2. URI를 Base64 문자열로 변환하기

private String getBase64FromUri(Uri uri) throws IOException {
  InputStream inputStream = getContentResolver().openInputStream(uri);
  ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
  int bufferSize = 1024;
  byte[] buffer = new byte[bufferSize];

  int len;
  while ((len = inputStream.read(buffer)) != -1) {
    byteBuffer.write(buffer, 0, len);
  }

  byte[] imageBytes = byteBuffer.toByteArray();
  return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}

 

 

바이트 배열 생성: URI로부터 바이트 배열을 생성하는 것은 이전 예제와 동일합니다.

 

Base64 인코딩: Base64.encodeToString() 메서드를 사용하여 바이트 배열을 Base64 문자열로 변환합니다.

 

 

Base64 인코딩은 바이너리 데이터를 텍스트로 변환하는 방법입니다.

이 방법은 이메일 전송, JSON 포맷으로 데이터를 전송할 때 매우 유용합니다. Base64 인코딩을 사용하면 이미지 데이터를 문자열 형태로 전송할 수 있습니다.