메뉴 건너뛰기

XEDITION

ANDROID

조회 수 3140 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

자세한 설명은 아래 링크에서 (서버단에서는 라이브러리 필요)

 http://warmz.tistory.com/731

 

클라이언트 ::

 UploadTest.java

 

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package FileManager;
 
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class UploadTest {
    public static void main(String[] args) {
        String filePath = "c:/1.jpg";
 
        try {
            upload(filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public static void upload(String filePath) throws IOException {
        String url = "http://localhost:8080/web/Uploader";
 
        // 데이터 구분문자. 아무거나 정해도 상관없지만 꼭 나타날 수 없는 형태의 문자열로 정한다.
        String boundary = "^******^";
 
        // 데이터 경계선
        String delimiter = "\r\n--" + boundary + "\r\n";
 
        StringBuffer postDataBuilder = new StringBuffer();
 
        // 추가하고 싶은 Key & Value 추가
        // key & value를 추가한 후 꼭 경계선을 삽입해줘야 데이터를 구분할 수 있다.
        postDataBuilder.append(delimiter);
        postDataBuilder.append(setValue("type", "image"));
        postDataBuilder.append(delimiter);
        postDataBuilder.append(setValue("name", "이지형"));
        postDataBuilder.append(delimiter);
 
        // 파일 첨부
        postDataBuilder.append(setFile("uploadedFile", "temp.jpg"));
        postDataBuilder.append("\r\n");
 
        // 커넥션 생성 및 설정
        HttpURLConnection conn = (HttpURLConnection) new URL(url)
                .openConnection();
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="
                + boundary);
 
        // 전송 작업 시작
        FileInputStream in = new FileInputStream(filePath);
        DataOutputStream out = new DataOutputStream(new BufferedOutputStream(
                conn.getOutputStream()));
 
        // 위에서 작성한 메타데이터를 먼저 전송한다. (한글이 포함되어 있으므로 UTF-8 메소드 사용)
        out.writeUTF(postDataBuilder.toString());
 
        // 파일 복사 작업 시작
        int maxBufferSize = 1024;
        int bufferSize = Math.min(in.available(), maxBufferSize);
        byte[] buffer = new byte[bufferSize];
 
        // 버퍼 크기만큼 파일로부터 바이트 데이터를 읽는다.
        int byteRead = in.read(buffer, 0, bufferSize);
 
        // 전송
        while (byteRead > 0) {
            out.write(buffer);
            bufferSize = Math.min(in.available(), maxBufferSize);
            byteRead = in.read(buffer, 0, bufferSize);
        }
 
        out.writeBytes(delimiter); // 반드시 작성해야 한다.
        out.flush();
        out.close();
        in.close();
 
        // 결과 반환 (HTTP RES CODE)
        conn.getInputStream();
        conn.disconnect();
    }
 
    /**
     * Map 형식으로 Key와 Value를 셋팅한다.
     * @param key : 서버에서 사용할 변수명
     * @param value : 변수명에 해당하는 실제 값
     * @return
     */
    public static String setValue(String key, String value) {
        return "Content-Disposition: form-data; name=\"" + key + "\"r\n\r\n"
                + value;
    }
 
    /**
     * 업로드할 파일에 대한 메타 데이터를 설정한다.
     * @param key : 서버에서 사용할 파일 변수명
     * @param fileName : 서버에서 저장될 파일명
     * @return
     */
    public static String setFile(String key, String fileName) {
        return "Content-Disposition: form-data; name=\"" + key
                + "\";filename=\"" + fileName + "\"\r\n";
    }
}

 

 

서버 ::

 Uploader.java (Servlet)

 

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
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
  
    int postMaxSize = 10 * 1024 * 1024;
    String folderPath = "../"; // 파일이 저장될 경로
    String encoding = "UTF-8";
  
    MultipartRequest mRequest = new MultipartRequest(request, folderPath,
            postMaxSize, encoding, new DefaultFileRenamePolicy());
  
    // 받은 데이터 출력
    String key, value;
    Enumeration<String> enumer = mRequest.getParameterNames();
    while (enumer.hasMoreElements()) {
        key = enumer.nextElement();
        value = mRequest.getParameter(key);
  
        System.out.println(key + " : " + value);
    }
  
    // 파일 이름 출력
    File file;
    File rename = new File("picture1.jpg");
    enumer = mRequest.getFileNames();
    while (enumer.hasMoreElements()) {
    key = enumer.nextElement();
        file = mRequest.getFile(key);
        System.out.println(key + " : " + file.getName());
          
        // 파일명 수정
        // renameTo() 메소드는 플랫폼 의존적 메소드이므로 제대로 동작이 되는지
        // 반드시 확인해야 한다. 만약 false가 반환된다면 복사 방식으로
        // 구현해야 한다. (퍼미션 관련)
        System.out.println("rename : " + file.renameTo(rename));
    }
}
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
64 [슈팅 게임 만들기] 11. 강좌가 늦어져 예제로 대신합니다 엘리후 2017.06.01 93
63 안드로이드 게임 만들기 SpriteAnimation 엘리후 2016.02.29 672
62 [안드로이드 어플 개발] 이동 애니메이션 (Translate Animation) 엘리후 2015.12.24 373
» Multipart를 이용하여 파일+문자열 한꺼번에 전송하기 엘리후 2015.12.01 3140
60 How do I upload large files (10MB) in Android? 엘리후 2015.11.26 925
59 Upload Video from android to server? 엘리후 2015.11.26 266
58 안드로이드] Fragment 쉽게 사용하기 엘리후 2015.11.24 386
57 안드로이드(android) 다이얼로그(dialog) 종류별 구현 방법 엘리후 2015.11.11 431
56 ActionBar에 메뉴 넣기. 엘리후 2015.11.11 188
55 앱 통계를 내 사이트에서 수집하기 엘리후 2015.10.07 827
54 나인패치 (9patch) 이미지 만드는 방법 엘리후 2015.10.07 350
53 VOLLEY 라이브러리 엘리후 2015.10.02 539
52 안드로이드 나인패치 이미지 만들기 [나인패치 영역선택 및 수정] 엘리후 2015.09.25 879
51 안드로이드 Support Library Setup 엘리후 2015.09.25 444
50 안드로이드 Multipart 업로드 예제 엘리후 2015.09.23 8811
49 이클립스/Eclipse 메모리 Heap 영역 늘리기 엘리후 2015.09.13 263
48 [Android, Hybrid]openFileChooser 킷캣에서 동작하지 않는 문제( openFileChooser Kitkat bug ) 엘리후 2015.08.27 605
47 Android – WebView에서 input태그를 통한 파일 업로드하기 엘리후 2015.08.27 3627
46 WebView 컨트롤 엘리후 2015.08.27 445
45 안드로이드 동영상 파일 업로드 예제 엘리후 2015.08.25 1181
44 안드로이드 채팅 ui 만들기 관련 리스트뷰(ListView)의 layout_weight 옵션을 이용한 채팅 GUI 구현, 카카오 채팅 말풍선 엘리후 2015.08.21 27790
43 Android 간단한 로그인, 회원 가입 폼 만들기 for Mac (PHPMyAdmin 이용) 엘리후 2015.08.21 1962
42 안드로이드 프레임워크 프로그래밍 [시스템서비스 추가하기] 엘리후 2015.08.11 156
41 안드로이드에서 실행 시 발생하는 에러 엘리후 2015.08.10 164
40 안드로이드 ; 스크롤 뷰 엘리후 2015.08.09 1840
39 android Facebook SDK 3.0 로그인 및 포스팅 엘리후 2015.08.07 479
38 [android] 안드로이드 전역 변수 사용하기 android global variable 엘리후 2015.07.30 645
37 [Android] WebView를 사용할때 HttpClient를 이용한 Session 유지 엘리후 2015.07.29 5567
36 [MY_SQL] where절과 having절의 차이 엘리후 2015.07.27 246
35 [안드로이드 개발 강좌] 데이터베이스(DataBase) - DB 생성,저장,수정,삭제 엘리후 2015.07.21 939
Board Pagination Prev 1 2 3 Next
/ 3
위로