2010-05-15 6 views
1

J2ME 클라이언트에서 Servlet으로 이미지를 보내려고합니다.J2ME 클라이언트에서 Servlet으로 이미지 업로드

이미지의 바이트 배열을 가져 와서 HTTP POST를 사용하여 보낼 수 있습니다.

conn = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true); 
conn.setRequestMethod(HttpConnection.POST); 
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
os.write(bytes, 0, bytes.length); // bytes = byte array of image 

은 서블릿 코드 :

String line; 
BufferedReader r1 = new BufferedReader(new InputStreamReader(in)); 
while ((line = r1.readLine()) != null) { 
    System.out.println("line=" + line); 
    buf.append(line); 
} 
String s = buf.toString(); 
byte[] img_byte = s.getBytes(); 

그러나 문제 본인은 J2ME 클라이언트에서 바이트를 보낼 때, 일부 바이트가 손실된다 발견했다. 값은 0A0D입니다. 정확히, 캐리지 리턴과 라인 피드.

따라서 POST 메서드 또는 readLine()0A0D 값을 허용 할 수 없습니다.

아무에게도이를 수행하는 방법이나 다른 방법을 사용하는 방법이 있습니까?

답변

1

BufferedReader을 사용하여 이진 스트림 을 라인에서 읽을 수 있기 때문입니다. readLine() 기본적으로 의 내용을 CRLF로 나눕니다. 이러한 개별 행에는 CRLF가 더 이상 포함되지 않습니다.

이진 스트림에 BufferedReader을 사용하지 마십시오. 의미가 없습니다. 얻은 InputStream을 어떤 향료의 OutputStream에 씁니다. FileOutputStream, usual Java IO way 말했다

InputStream input = null; 
OutputStream output = null; 

try { 
    input = request.getInputStream(); 
    output = new FileOutputStream("/path/to/file.ext"); 

    byte[] buffer = new byte[10240]; 
    for (int length = 0; (length = input.read(buffer()) > 0;) { 
     output.write(buffer, 0, length); 
    } 
} finally { 
    if (output != null) output.close(); 
    if (input != null) input.close(); 
} 

, 사용중인 Content-Type 기술적으로 잘못된 것입니다. 요청 본문에 WWW 형식 URL 인코딩 값을 보내지 않습니다. 바이너리 스트림을 보내고 있습니다. application/octet-stream이거나 image 일 수 있습니다. 이것은이 문제의 원인이 아니지만 그것은 단지 명백한 잘못입니다.