본문 바로가기

Android/Knowhow

안드로이드 파일의 확장자 알아내기 getFileExtensionFromUrl

#첨부파일이 안열린다.

-MIME-Type을 잘 지정해도 해결되지 않는다.

-pdf 파일만 열린다.(엑셀, 워드, ppt, hwp, txt 안열림)

-OS 특성은 아니다.

-모바일 브라우저에서 URL을 직접 입력후 다운받은 파일은 정상으로 열린다.

-> 다운받을 때 잘못된 것 같다.

 

게시물에 문서 첨부파일이 있으면 리사이클러뷰로 출력하고, 항목을 클릭했을 때 다운받아서 뷰어로 연결하는 기능을 구현했다.


인텐트에 확장자 별 MimeType을 싣어주어야 한다.


그래서 난 Utility 클래스에 파일의 확장자명을 추출하고, 확장자 별 Mime Type을 리턴하는 메서드를 구현했다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
String mimeType = Utility.getMimeType(
                    Utility.getOnlyExtension(Uri.fromFile(file).toString())
                  );
 
 
 
 
### Utility class ###
 
 
    /**
     * 첨부파일 Uri로부터 파일 확장자명을 리턴합니다.
     */
    public static String getOnlyExtension(String fullUri) {
        int fileIndex = fullUri.lastIndexOf(".");
        return fullUri.substring(fileIndex + 1, fullUri.length());
    }
 
    /**
     * 파일 확장자별 Mime-Type을 리턴합니다.
     */
    public static String getMimeType(String extensionStr) {
        switch (extensionStr) {
            case "doc" :
            case "docx" :
                return "application/msword";
            case "xls" :
            case "xlsx" :
                return "application/vnd.ms-excel";
            case "ppt" :
            case "pptx" :
                return "application/vnd.ms-powerpoint";
            case "pdf" :
                return "application/pdf";
            case "hwp" :
                return "application/haansofthwp";
            case "txt" :
                return "text/plain";
        }
        return "";
    }
cs











하.지.만!!


이미 안드로이드는 이러한 경우를 대비하여 전용 클래스를 만들어놓았다.


윽 검색해볼걸!!!! 좋은 경험이었다.


MimeTypeMap 클래스에는 확장자명과 MimeType을 추출해주는 메서드가 있다.








실수하기 딱 좋은 경우가 있다.


MimeType을 추출하는 함수는 MimeTypeMap 객체를 통해서 사용해야하는데


확장자명을 추출하는 함수는 static이다.


대충 문서보고나서 구현했다가 계속 getFileExtensionFromUrl()가 null을 리턴해서 헛짓했다 ㅜㅜ



1
2
3
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimeType = mimeTypeMap.getMimeTypeFromExtension( extension );
cs