마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

httpURLConnection을 이용한 서버에 이미지 업로드..

0 추천

갤러리에서 이미지를 선택해서 

node.js서버로 업로드 하고싶습니다. 

 

conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
DataOutputStream ds = new DataOutputStream(conn.getOutputStream());
File file = new File(absolutePath);
FileInputStream fs = new FileInputStream(file);
Log.d("메시지", "파일 : "+file);

try {
    // opening boundary line
    ds.writeBytes(twoHyphens + boundary + this.crlf);
    ds.writeBytes("Content-Disposition: form-data; name=\""
            + "bitmap.jpg"
            + "\""
            + this.crlf);
    ds.writeBytes("Content-Type: " + "application/octet-stream" +  this.crlf);
    ds.writeBytes(this.crlf);

    // create a buffer of maximum size
    int bytesAvailable = fs.available();
    int maxBufferSize = 1024;
    int bufferSize = Math.min(bytesAvailable, maxBufferSize);
    byte[] buffer = new byte[bufferSize];
    // read file and write it into form...
    int bytesRead = fs.read(buffer, 0, bufferSize);
    while (bytesRead > 0)   {
        ds.write(buffer, 0, bufferSize);
        bytesAvailable = fs.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fs.read(buffer, 0, bufferSize);
    }

    // closing CRLF
    ds.writeBytes(this.crlf);
}
catch(Exception e)  {

    Log.e(TAG, "AndroidUploader.writeFormField: got: " + e.getMessage());
}


ds.writeBytes(twoHyphens + boundary + twoHyphens + this.crlf);
ds.flush();
ds.close();

갤러리에서 사진을 선택한 후 얻은, 사진의 절대경로를 File의 생성자로 주었습니다. 이게 맞나요??

이 코드를 사용해 서버에 이미지를 보내면 콘솔창이 깨집니다..

content-type을 image/jpg로 바꿔도 안되네요..

어디가 잘못된건지 모르겠어요

 

익명사용자 님이 2016년 12월 26일 질문

1개의 답변

0 추천

아래의 라인에 name 과 filename 둘다 들어가야 합니다.

name은 서버에서 접근할때 사용하는 변수명입니다.

Content-Disposition: form-data;

 

또한 위의 소스중에 루프문 안에서 

ds.write(buffer, 0, bufferSize); 라는 코드가 아래처럼 바뀌어야 합니다.

ds.write(buffer, 0, bytesRead);

 

콘솔창이 깨지는 것은 무엇을 출력하는지 몰라서 답변을 못드리겠습니다.

노드js에 익스프레스 모듈을 붙여서 사용한다면, 위의 코드로 던졌을때 임시폴더에 해당 이미지파일이 자동으로 저장이 되고, 해당 파일을 복사해서 원하는 위치에 저장을 하는 루틴으로 구성됩니다.

콘솔과는 무관한 내용입니다.


다만 제일 마지막에 200 이라고 찍힌 것으로 보아 정상적으로 처리된 내용입니다.

 

바램 (19,650 포인트) 님이 2016년 12월 26일 답변
...