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

이미지뷰의 이미지를 서버에 저장하려고 합니다.

0 추천

안드로이드 쪽에서는 multipart/form-data형식을 사용했습니다.

jsp에서는 MultipartRequest를 이용하려고 합니다.

예제들을 봐도 두가지를 함께 쓰던데요.

jsp파일을 컴파일 해보면 

java.io.IOException: Posted content type isn't multipart/form-data

이렇게 뜹니다.

MultipartRequest를 사용하면 안되나요? 그렇다면 어떤걸 이용하면 되나요?

 


소스 추가합니다.

안드로이드 부분입니다.

private void HttpFileUpload(String urlString, String params, String fileName) {
		// TODO Auto-generated method stub
		try{
			Log.v("HttpFileUpload", "urlString = "+urlString + ",params = "+params +", fileName = "+fileName);
			mFileInputStream = new FileInputStream(fileName);
			connectUrl = new URL(urlString);
			Log.d("Test", "mFileInputStream  is " + mFileInputStream);
			
			//open Connection
			HttpURLConnection conn = (HttpURLConnection)connectUrl.openConnection();
			conn.setDoInput(true);// 인풋스트림 쓸거라고 지정
			conn.setDoOutput(true);// 아웃풋 스트림 쓰기위에 아웃풋을 true로 켬
			conn.setUseCaches(false);
			conn.setRequestMethod("POST");//요청방식선택
			conn.setRequestProperty("Connection", "Keep-Alive");//Request Header값 셋팅 setRequestProperty(String key, String value)
			conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
			Log.d("Test", "3 HttpURLConnection  is " +conn);
			
			//write data
			DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
			Log.d("Test", "conn.getOutputStream()  is " + conn.getOutputStream());
			dos.writeBytes(twoHyphens + boundary + lineEnd);
			dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + fileName+"\"" + lineEnd);
			dos.writeBytes(lineEnd);
			Log.d("Test", "DataOutputStream  is " +dos);
			
			int bytesAvailable = mFileInputStream.available();
			int maxBufferSize = 1024;
			int bufferSize = Math.min(bytesAvailable, maxBufferSize);
			
			byte[] buffer = new byte[bufferSize];
			int bytesRead = mFileInputStream.read(buffer , 0 ,bufferSize);
			Log.d("Test", "image byte is " + bytesRead);
			
			//read image
			while(bytesRead > 0){
				dos.write(buffer,0,bufferSize);
				bytesAvailable = mFileInputStream.available();
				bufferSize = Math.min(bytesAvailable, maxBufferSize);
				bytesRead = mFileInputStream.read(buffer,0,bufferSize);
			}
			dos.writeBytes(lineEnd);
			dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
			
			//close streams
			Log.e("Test","File is written");
			mFileInputStream.close();
			dos.flush(); // finish upload
			
			//get response
			int ch;
			InputStream is = conn.getInputStream();
			StringBuffer b = new StringBuffer();
			while((ch = is.read()) != -1){
				b.append((char)ch);
			}
			String s = b.toString();
			Log.e("Test","result = "+ s);
			mEdityEntry.setText(s);
			dos.close();
			
		}catch(Exception e){
			Log.e("Test","exception >> "+ e.getMessage()); // 인증실패?
	
			// 에러 메시지  1 : open failed: ENOENT (No such file or directory)
		}

jsp부분입니다.

<%@ page import="java.io.File" %>
<%@ page import="java.io.*" %>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
 <html><body><!--  http://guraguna.tistory.com/12 -->
    <form name="formName" method="post" enctype="multipart/form-data">
<input type="file" name="selectfile">
          
          
     <%
     
     request.setCharacterEncoding("euc-kr");
 
 String saveDir = application.getRealPath("/upload/");
     
     int maxSize = 1024*1024*100;
     String encType="UTF-8";
     
     MultipartRequest multipartRequest = 
    new MultipartRequest(
    request,saveDir,maxSize,encType,new DefaultFileRenamePolicy());
     String image = multipartRequest.getParameter("image");
     
     File dir = new File(saveDir);
     
     String fName[] = dir.list();
     
     for(String FileName : fName ){
    out.write
    ("<a href=\""+request.getContextPath()+"/upload?filename="
    +java.net.URLEncoder.encode(FileName,"UTF-8")+"\" >"+FileName+"</a><br>");
     }
     %>     
 
    
    </form>
    </body></html>
 

에러 메시지 입니다.

HTTP Status 500 - An exception occurred processing JSP page /uploadTest.jsp at line 28


type Exception report

message An exception occurred processing JSP page /uploadTest.jsp at line 28

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.io.IOException: An exception occurred processing JSP page /uploadTest.jsp at line 28

25:      String encType="UTF-8";
26:      
27:      MultipartRequest multipartRequest = 
28:     		 new MultipartRequest(
29:     				 request,saveDir,maxSize,encType,new DefaultFileRenamePolicy());
30:      String image = multipartRequest.getParameter("image");
31:      


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:460)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

 

root cause

java.io.IOException: Posted content type isn't multipart/form-data
	com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:168)
	com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:223)
	org.apache.jsp.uploadTest_jsp._jspService(uploadTest_jsp.java:94)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
답변부탁드리겠습니다.    
아이고이고이고 (360 포인트) 님이 2015년 5월 8일 질문

2개의 답변

0 추천

HTTP Status 500

500 은 서버 에러 문구입니다.

aucd29 (218,390 포인트) 님이 2015년 5월 8일 답변
0 추천
에러는 서버에러입니다.

에러를 유발시킨 것은 앱이군요.

포스트 컨텐츠가 multipart/form-data가 아니라는 메세지내요.

mulitpart/form-data로 파일을 업로드 하실때는 정확하게 http 의 message format을 마추어 주셔야합니다.

기본적으로 우선은 jsp가 정확하게 동작하는지를 확인하시고 하시는 것이 좋습니다.

이런 http로 데이터를 전송에 익숙하지 않으시면 클라이언트가 오류인지 서버가 오류인지 케치하기가 쉽지 않습니다.
컴러기 (22,230 포인트) 님이 2015년 5월 8일 답변
...