JAVA에서 MULTIPART FORM REQUEST를 이용한 파일전송


30 May
30May

Client(브라우저) 에서 서버로 파일을 전송할 때는 <Form> 태그를 이용하여 MultiPart Form 타입으로 전송하게 된다.

하지만, Server에서 Server로 파일을 전송하려면 <Form>태그를 사용할 수 없기 때문에 MultiPart 전송모듈을 서버에 구현해줘야 한다.

퓨어자바로 개발하는 방법도 있지만 여기서는 Apache 라이브러리를 사용하는 예제를 소개한다.

1. 라이브러리

  • 필요 라이브러리
    • Apache Http Client(4.5.2)
    • Apache HttpCore(4.5.2)
    • Apache HttpClient Mime(4.5.2)
    • log4j

라이브러리 버전별로 클래스명과 메소드명, 사용방법이 다르니 사용할 버전의 API문서를 참고하시기 바랍니다.

2. 구현

  • 파일송신 서버

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public void fileSender(){

    HttpClient client = HttpClientBuilder.create().build();

    HttpPost post = new HttpPost("http://localhost:8080/test/admin/fileReciever.do");

     

    try {

        String fileUrl = "D:\\fileToSend.zip";

        File fileToSend = new File(fileUrl);

        InputStream inputStream = new FileInputStream(fileToSend);

         

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();

        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

        builder.addBinaryBody("upstream", inputStream, ContentType.create("application/zip"), "fileToSend.zip");

        HttpEntity entity = builder.build();

 

        post.setEntity(entity);

        HttpResponse response = client.execute(post);

    } catch (IOException e) {

        e.printStackTrace();

    }

}

  • 파일수신 서버

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

@RequestMapping(value = {"/admin/fileReciever.do"}, method=RequestMethod.POST)

public void fileReciever(HttpServletRequest request, HttpServletResponse response) throws Exception{

    InputStream input = request.getInputStream();

    BufferedInputStream bIn = new BufferedInputStream(input);

 

    FileOutputStream fOut = new FileOutputStream(new File("d:\\fileToSend.zip"));

    BufferedOutputStream bOut = new BufferedOutputStream(fOut);

 

     

    byte[] buf = new byte[1024];

    int read = 0;

     

    while ( (read = bIn.read(buf, 0, buf.length)) != -1 ){

            bOut.write(buf, 0, read);

    }

    bOut.flush();

    bOut.close();

    bIn.close();

}

댓글
* 이메일이 웹사이트에 공개되지 않습니다.