GET 방식으로 파일을 다운로드를 하다보니 크롬에서는 괜찮지만, IE에서는 문제가 발생한다.


 "서버를 찾을 수 없습니다" 라던가 " 이 페이지는 존재 하지않습니다" 라던가 등등의 문제가 발생한다.


 이유는 간단한데, GET방식의 글자 제한으로 인한 문제이다..

 글자를 줄일수 있다면야 계속 사용하겠지만, 그건 안되고 ㅜㅜ 


 그래서 GET을 POST 방식으로 바꾸기로했다.

 (사실 말이 POST방식이지 GET을 사용하여 다운로드를 한다.)


 그래도 혹시 모르니 GET, POST 방식 모두 올려 놓도록 하겠다.


 GET 방식

 view 단


location.href = url + '/filedownload?' + encodeURI(me.form.serialize() , "UTF-8");


location.href 을 사용하면 get 방식으로 사용이 된다고 함.

encodeURI( 포맷, "포맷방식") 을 사용하여 한글 깨짐이 없도록 한다.



Controller 단

    @RequestMapping(value = "/filedownload", method = RequestMethod.GET)

    public ModelAndView getFile(@RequestParam ... ) throws Exception {


        String fileNm = "파일명";

        

        String path = "파일의 경로"


        if(path == null){

        return null;

        }

        File file = new File(path);


        param.put("file", file);

        param.put("fileName", fileNm);

        param.put("contentType", "application/download;charset=UTF-8");


        return new ModelAndView("downloadView", param);

    }



POST 방식


view단

            $.ajax({

                   url: url + '/filedownload',

                   method: 'POST',

                   loadingTarget: true,

                   data: me.form.serialize(),

                   dataType: 'json',

                   success: function(data) {

                     if (data.header.success) {

                         if(!data.body)

                             return;

                         var path = 'path=' + data.body;

                         location.href = url + '/filedownload?' +  encodeURI(path , "UTF-8");

                       }

                   }

               });


Controller 단


    @RequestMapping(value = "/filedownload", method = RequestMethod.POST)

    @ResponseBody

    public Result getFile(@RequestParam ... ) throws Exception {


        String fileNm = "파일명";

        String path = "파일의 경로"


        path = URLEncoder.encode(path, "UTF-8");


        return new Result(true, "0000", (Object) path);

    }

    

    

    @RequestMapping(value = "/filedownload", method = RequestMethod.GET)

    public ModelAndView getFile(@RequestParam ... ) throws Exception {

        

        String path = (String) param.get("path");    // 위에서 보냈던 경로가 들어옴

        

        if(path == null){

        return null;

        }

        

        path = URLDecoder.decode(path, "UTF-8");

        String fileNm = "파일명";

        

        File file = new File(path);


        param.put("file", file);

        param.put("fileName", fileNm);

        param.put("contentType", "application/download;charset=UTF-8");


        return new ModelAndView("downloadView", param);

    }


ajax로 post 방식으로 값을 먼저 보낸 후,

파일 경로를 받아 get으로 다운을 하면 된다.



코틀린에도 기본적인 변수의 타입은 숫자, 문자, 참거짓 등이 있지만

선언 방식은 자바와는 사뭇 다른데,


자바에서의 변수를 선언은

문자형 : String str;

숫자 : int num;

참거짓 : boolean bol;

으로 타입을 선언하고 변수명을 말한다면,


코틀린에서는 

 var str: String = "가나다"

①  ②    ③           ④   

 

으로 사용을 하게 되는데, 자세히 살펴보자면 

var는 함수 선언으로 val과 var가 있습니다.


  * val : 변할수 없는 상수. (자바 - final 같은)

  * var : 일반 함수선언


즉 val로 선언을 할시에는 후의 코드에서

str = "라마바" 와 같은 선언이 불가능 하고 var에서는 가능합니다.


② 은 변수명을 선언해주는 것으로, 본인의 목적에 맞는 명을 적어주면 됩니다.


③ 은 타입을 선언을 하는 부분입니다.

이때 선언을 할때는 변수명뒤에 반드시 : 를 적어둔 다음 선언을 해야합니다.

자바와 달리 생략도 가능하고, 넣어주는 값에 따라 어떤 타입인지 추론이 가능합니다.

 ex) var x = 1  // int 추정

var y = true  // boolean


④ 은 넣어주는 값을 의미하는데, 이 역시 생략은 가능합니다.


갑자기 뭔가 해야 겠다라는 생각이 들어서 시작한 어플 개발기로

원래는 안드로이드 스튜디오에서 자바로 하려다가 눈에 뜬 코틀린이 눈에 들어왔는데,

이런 저런 해서 엄청 각광 받는 언어라고 한담.

(하지만 주변에 말하니 그거 별로라고,, 하지말고 그냥 자바나 쓰라고...)


여튼, 하게되었는데, 문제가 생겼다....

일단 안드로이드 스튜디오사용법이 기억나지 않는다... 

그리고 코틀린언어를 모른다..


그래서 하나하나 어플제작하면서 이번엔 안드로이드를 안까먹겠다는 의지로 하나씩 적어보려한다.



일단 안드로이드 스튜디오에서 코틀린을 사용하려면 두가지가 있다고 한다.

 1. 기존 사용 코드(자바) > 코틀린으로 바꿈.

 2. 처음부터 시작을 코틀린으로 사용하기.


저는 두번째방법으로 시작을 할거에요


 안드로이드 스튜디오를 킨 다음

파일(file) > 설정 (settings: ctrl + alt + S) > plugins > kolin

 을 쳐서 다운을 해줍니다. (3.0 이상에서는 포함이 되어있다고해요.)





저는 뭔지모르겠지만 업데이트를 해야할거 같기 때문에 업데이트를 합니다.


그러고 난 다음에 적용을 위해서 안드로이드 스튜디오를 재부팅하고,

새로운 프로젝트 만들기를 누른다음에 꼭! 하단의 include Kotlin support 를 눌러줍니다.

안 누르면 코틀린으로 시작을 안해요..





 * 자세하지는 않지만 현재 프로젝트에서 코틀린을 하는방법은

 (shift + alt + n)을 누른뒤에 'Convert Java File to Kotlin File' 을 쳐서 바꾸어 준다면 된다.


혹시라도 자세하게 시작하는 방법이 궁금하다면

http://kotlinlang.org/docs/tutorials/kotlin-android.html


이 사이트를 참고하길 바란다.


'IT > Language' 카테고리의 다른 글

[JAVA] POST 방식으로 파일 다운로드하기.  (0) 2019.01.16
[Kotlin] Kotlin의 기본 변수 선언  (0) 2019.01.04

+ Recent posts