지금 사진 업로드를 구현 중인데요,
현재 완료된 작업은 사진선택(갤러리) -> 선택한 사진 비트맵 파일에 쓰기 -> 생성된 이미지 파일 서버 전송
입니다.
근데 문제는 갤러리에서 선택한 사진을 일단 내부 파일에 쓰고 나서 서버에 보낸 다는 문제가 있습니다..
만약에 사용자 폰 용량이 부족해서 내부에 파일이 써지지 않는다면 큰일이겠죠..
아래 소스는 새 파일을 스는 소스 입니다.
String path = rootView.getContext().getFilesDir().getPath();
FileOutputStream fos = rootView.getContext().openFileOutput("profile.png" , 0);
bm.compress(Bitmap.CompressFormat.PNG, 100 , fos);
fos.flush();
fos.close();
new File(path + "/profile.png")) //이걸 서버에 보냅니다. (일부부만 따온것.)
이렇게 profile.png라는 파일스트림을 만들고 사진의 비트맵을 삽입하는 식입니다.
이렇게 한 이유는 서버에 전송할때 retrofit 라이브러리를 쓰는데 파일을 보낼때 인자값에 new FIle()을 줘야 합니다.
new File(String fileURI) 여서 file을 생성해야 fileURL를 가져올수 있기 때문에 파일을 생성했습니다..
하지만 갤러리의 사진도 결국 폰 내부에 있는 사진파일이니까 URI가 있을거 같은데..
이 String URI를 가져오는 방법을 모르겠습니다 ㅠㅠㅠㅠ
현재는 아래처럼 되있습니다.
AssetFileDescriptor fileDescriptor = rootView.getContext().getContentResolver().openAssetFileDescriptor( data.getData(), "r");
Bitmap resultBitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
요런식으로 파일을 읽어서 비트맵으로 만듭니다..
그리고 만들어진 비트맵을 넘겨서 아까 저~ 위에 있던 소스처럼 앱내부에 파일을 만듭니다..
이 파일을 만드는 작업을 빼고 싶습니다
그러기 위해선 AssetFileDescriptor로 읽어드린 파일의 uri를 알아낼 방법이 필여합니당...
도와주세용..