안드로이드 쪽에서는 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"%>
<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)
답변부탁드리겠습니다.