java.io.IOException: Posted content type isn't multipart/form-data 에러좀 해결해 주세요

victimize의 이미지

jsp 부분은

 
 
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="com.sinc.common.FileDTO" %>
<%@ page import="com.sinc.common.CodeParamDTO" %>
<%@ include file = "/jsp/back/common/commonInc.jsp" %>
<%@ page import="org.apache.commons.configuration.Configuration" %>
<%@ page import="com.sinc.framework.configuration.ConfigurationFactory" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
 
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<%       
     String v_grcode               = box.getString("p_grcode");
     String v_year               = box.getString("p_year");
     String v_subj               = box.getString("p_subj");
     String v_subjseq          = box.getString("p_subjseq");
     String v_seq               = box.getString("p_seq");
     String v_process          = box.getString("p_process");
     String v_pageno             = box.getStringDefault("p_pageno","1");     
%>
<fmtag:csscommon point="back" />
<fmtag:jscommon />
<script type="text/javascript">
     function studyNoticeBoardBatchWrite() {
          var f = document.form1;
          var pf = opener.document.form1;
 
          if ( !validate(f) )      return;
          if ( !validateEtc(f) )      return;
 
          var arrSubjSeqList = new Array();
          var j = 0;
          var v_subjseqlist = pf.p_subjseqlist;
          for ( var i=0; i < v_subjseqlist.length; i++ ) {
               if ( v_subjseqlist[i].checked ) {
                    arrSubjSeqList[j++] = v_subjseqlist[i].value;
               }
          }
 
          if ( v_subjseqlist.length == undefined ) {
               arrSubjSeqList[0] = v_subjseqlist.value;
          }
 
          if ( confirm("등록하시겠습니까?") ) {
               f.p_subjseqlist.value = arrSubjSeqList.toString();
                 f.submit();
          }
     }
     function validateEtc(f) {
          var contents = FCKeditor("p_contents");
          if(contents == "") {
               alert("내용을 입력하세요.");
               return false;
          }
 
          if(f.p_types.value == "") {
               alert("공지구분을 선택하세요.");
               return false;
          }
            return true;
     }
     function addVariable(str) {
          var oEditor = FCKeditorAPI.GetInstance("p_contents") ;
          contents = oEditor.GetData() + " " + str;
          oEditor.SetData(contents);
     }
     function clipboard(str) {
          window.clipboardData.setData('Text',str);
          alert("복사되었습니다.사용하실위치에 붙여넣으세요.");
     }
</script>
</HEAD>
<BODY leftMargin="0" topMargin="0" marginheight="0" marginwidth="0">
<form name="form1" action="/back/StudyNoticeBoard.do" method="post" enctype="multipart/form-data">
<input type="hidden" name="cmd"                    value="studyNoticeBatchWrite" />
<input type="hidden" name="p_grcode"           value="<%=v_grcode%>" />
<input type="hidden" name="p_year"                value="<%=v_year%>" />
<input type="hidden" name="p_subj"                value="<%=v_subj%>" />
<input type="hidden" name="p_subjseq"           value="<%=v_subjseq%>" />
<input type="hidden" name="p_subjseqlist"     value="" />
<!-- <table width="800" cellpadding="0" cellspacing="0"> -->
<table width="1300" cellpadding="0" cellspacing="0">
<tr>
     <!-- <td align="center"> -->
     <td align="left">
          <!-- 현재위치 -->
          <table width="760" cellpadding="0" cellspacing="0" class="mar_top_10">
          <tr>
               <td> + <%=s_menunavi %></td>
          </tr>
          </table>
          <!-- // -->
 
          <!-- 메뉴명 -->
          <table width="760" cellpadding="0" cellspacing="0" class="mar_top_15">
          <colgroup>
               <col width="10" />
               <col width="" />
          </colgroup>
          <tr>
               <td><img src="/images/back/icon/popup_bullet.gif"></td>
               <td class="t_title">선택공지등록</td>
          </tr>
          </table>
          <!-- // -->
 
          <!-- 입력폼 -->
          <!--
          <table width="760" border="0" cellpadding="0" cellspacing="0" class="mar_top_5">
          <colgroup>
               <col width="540" />
               <col width="220" />
          </colgroup>
          -->
          <table width="1250" border="0" cellpadding="0" cellspacing="0" class="mar_top_5">
          <colgroup>
               <col width="540" />
               <col width="220" />
          </colgroup>
          <tr valign="top">
               <td>
                    <div class="board-view">
                         <table width="1030" cellpadding="0" cellspacing="0">
                         <colgroup>
                              <col width="100" />
                              <col width="" />
                         </colgroup>
                         <tr>
                              <th class="th_top_bd">제목</th>
                              <td colspan="3" class="td_top_bd" style="padding:5px;">
                              <!-- <input name="p_contenttitle" type="text" size="60" dispName="제목" isNull="N" lenCheck="200" maxLength="200" value=""> -->
                              <input name="p_contenttitle" type="text" size="150" dispName="제목" isNull="N" lenCheck="200" maxLength="200" value="">
                              </td>
                         </tr>
                         <tr>
                              <th>공지구분</th>
                              <td><%=CommonUtil.getCodeListBox("select", "0023", "p_types", "", "", " - 선택 - ")%></td>
                         </tr>
                         <tr>
                              <th>내용</th>
                              <td colspan="3" style="padding:5px;">
                              <%= CommonUtil.getEditor(request,"p_contents","", "900", "580") %>
                              </td>
                         </tr>
                         </table>
                    </div>
               </td>
 
          <!-- 버튼 -->
          <table width="760" cellpadding="0" cellspacing="0" class="mar_top_10">
          <tr>
               <td align="right">
<%
     if ( s_menucontrol.equals("RW") ) {
%>
               <fmtag:button type="1" value="저장" func="studyNoticeBoardBatchWrite()" />
<%
     }
%>
               <fmtag:button type="1" value="취소" func="window.close()" />
               </td>
          </tr>
          </table>
          <!-- // -->
     </td>
</tr>
</table>
</form>
</body>
</html>

이부분인데 이페이지는 복수의 게시글을 등록하는 페이지입니다. 이페이지에 첨부파일을 추가할수 있게 짤려고 하는데
오류가 납니다. 관련 .java부분은

 
	/**
	 * 공지사항글을 일괄적으로 차수에 넣어주는 팝업을 띄운다.
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @param box
	 * @return
	 * @throws Exception
	 */
	public ActionForward studyNoticeBatchWritePop (
			ActionMapping mapping, 
			ActionForm form, 
			HttpServletRequest request, 
			HttpServletResponse response, 
			Box box )
	throws Exception {
		String uploadPath	= "/board/bbs/"+box.getString("p_year");
		int v_maxfilesize	= box.getInt("p_maxfilesize");
		UploadFiles files 	= FileUtil.upload(request, uploadPath, v_maxfilesize, false, "A", DateTimeUtil.getDateTime());
		try {
			RequestManager.getMultiBox(box, files.getMultipart());
		} catch(Exception e) {
 
		}
		DataSet data 			= null;
		String v_process 		= box.getString("p_process");
		ArrayList delFileList	= (ArrayList)box.getList("Old_p_file");
 
		String msg	 = null;
		String goUrl = "";
		int retVal	 = 0;
 
		//첨부파일갯수 = 첨부파일갯수 - 제거파일갯수 (기존에 등록된 파일갯수는 DAO에서 따로 계산해준다.)
		String v_upfilecnt = Integer.toString(files.getFiles().size() - delFileList.size());
		box.put("p_upfilecnt", v_upfilecnt);
		box.put("p_year", box.getString("p_year"));
 
		StudyBbsBoardMgr studyBbsBoardMgr = new StudyBbsBoardMgr();
 
		//파일 업로드 상태를 체크한다.(파일을 등록하지 않을경우도 "S")
		if(files.getStatus().equals("S") && files.getFiles().size() > 0){
			//업로드 파일 리스트를 가져온다. 
			ArrayList fileList = new ArrayList();
			HashMap hm = null;		
			UploadFile file = null;
 
			//파일을 가져와서 DB작업을 해준다. 
			for(int i=0 ; i<files.getFiles().size() ; i++){
				file = (UploadFile)files.getFiles().get(i); 
				hm = new HashMap();
				hm.put("p_savefile",file.getUploadName());
				hm.put("p_realfile",file.getRootName());
				hm.put("p_filesize",Long.toString(file.getSize()));
				fileList.add(hm);
			}
 
			box.put("FileList", fileList);
		}
 
		if ( files.getStatus().equals("S") ) {
			if ( v_process.equals("W") ) {
			    retVal = studyBbsBoardMgr.insertStudyBbsBoard(box);
			    if(retVal > 0) {
			    	msg = "게시물 등록에 성공하였습니다.";
			    } else {
			    	msg = "게시물 등록에 실패하였습니다.";
			    }
			} else if ( v_process.equals("E") ) {
			    if ( delFileList != null && delFileList.size() > 0 ) {
				    data = studyBbsBoardMgr.selectStudyBbsBoardDelFile(box);
 
			    	if(data != null && data.getRow() > 0) {
			    		for(int i=0 ; i<data.getRow() ; i++) {
			    			FileUtil.delFile(FileUtil.UPLOAD_PATH + uploadPath + "/" +  ((HashMap)data.getDataSet().get(i)).get("SAVEFILE"));
			    		}
			    	}
			    }
 
			    retVal = studyBbsBoardMgr.updateStudyBbsBoard(box);		    
			    if(retVal > 0) msg   = "게시물 수정에 성공하였습니다.";
			    else msg = "게시물 수정에 실패하였습니다.";
			}
		} else {
			UploadFile file = null;
 
			for(int i=0 ; i<files.getFiles().size() ; i++){
				file = (UploadFile)files.getFiles().get(i); 
 
				FileUtil.delFile(FileUtil.UPLOAD_PATH + uploadPath + "/" + file.getUploadName());
			}
 
			if(v_process.equals("W")) msg = "한 게시물당 최대 " + v_maxfilesize + "MB까지 파일을 올리실 수 있습니다.\\n게시물 등록에 실패하였습니다.";
			else if(v_process.equals("E")) msg = "한 게시물당 최대 " + v_maxfilesize + "MB까지 파일을 올리실 수 있습니다.\\n게시물 수정에 실패하였습니다.";
		}
 
		return mapping.findForward("StudyNoticeBatchWritePop");
	}
 

		/**
	 * 공지사항글을 일괄적으로 차수에 넣어주는 팝업을 띄운다.
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @param box
	 * @return
	 * @throws Exception
	 */
	public ActionForward studyNoticeBatchWritePop (
			ActionMapping mapping, 
			ActionForm form, 
			HttpServletRequest request, 
			HttpServletResponse response, 
			Box box )
	throws Exception {
		String uploadPath	= "/board/bbs/"+box.getString("p_year");
		int v_maxfilesize	= box.getInt("p_maxfilesize");
		UploadFiles files 	= FileUtil.upload(request, uploadPath, v_maxfilesize, false, "A", DateTimeUtil.getDateTime());
		try {
			RequestManager.getMultiBox(box, files.getMultipart());
		} catch(Exception e) {
 
		}
		DataSet data 			= null;
		String v_process 		= box.getString("p_process");
		ArrayList delFileList	= (ArrayList)box.getList("Old_p_file");
 
		String msg	 = null;
		String goUrl = "";
		int retVal	 = 0;
 
		//첨부파일갯수 = 첨부파일갯수 - 제거파일갯수 (기존에 등록된 파일갯수는 DAO에서 따로 계산해준다.)
		String v_upfilecnt = Integer.toString(files.getFiles().size() - delFileList.size());
		box.put("p_upfilecnt", v_upfilecnt);
		box.put("p_year", box.getString("p_year"));
 
		StudyBbsBoardMgr studyBbsBoardMgr = new StudyBbsBoardMgr();
 
		//파일 업로드 상태를 체크한다.(파일을 등록하지 않을경우도 "S")
		if(files.getStatus().equals("S") && files.getFiles().size() > 0){
			//업로드 파일 리스트를 가져온다. 
			ArrayList fileList = new ArrayList();
			HashMap hm = null;		
			UploadFile file = null;
 
			//파일을 가져와서 DB작업을 해준다. 
			for(int i=0 ; i<files.getFiles().size() ; i++){
				file = (UploadFile)files.getFiles().get(i); 
				hm = new HashMap();
				hm.put("p_savefile",file.getUploadName());
				hm.put("p_realfile",file.getRootName());
				hm.put("p_filesize",Long.toString(file.getSize()));
				fileList.add(hm);
			}
 
			box.put("FileList", fileList);
		}
 
		if ( files.getStatus().equals("S") ) {
			if ( v_process.equals("W") ) {
			    retVal = studyBbsBoardMgr.insertStudyBbsBoard(box);
			    if(retVal > 0) {
			    	msg = "게시물 등록에 성공하였습니다.";
			    } else {
			    	msg = "게시물 등록에 실패하였습니다.";
			    }
			} else if ( v_process.equals("E") ) {
			    if ( delFileList != null && delFileList.size() > 0 ) {
				    data = studyBbsBoardMgr.selectStudyBbsBoardDelFile(box);
 
			    	if(data != null && data.getRow() > 0) {
			    		for(int i=0 ; i<data.getRow() ; i++) {
			    			FileUtil.delFile(FileUtil.UPLOAD_PATH + uploadPath + "/" +  ((HashMap)data.getDataSet().get(i)).get("SAVEFILE"));
			    		}
			    	}
			    }
 
			    retVal = studyBbsBoardMgr.updateStudyBbsBoard(box);		    
			    if(retVal > 0) msg   = "게시물 수정에 성공하였습니다.";
			    else msg = "게시물 수정에 실패하였습니다.";
			}
		} else {
			UploadFile file = null;
 
			for(int i=0 ; i<files.getFiles().size() ; i++){
				file = (UploadFile)files.getFiles().get(i); 
 
				FileUtil.delFile(FileUtil.UPLOAD_PATH + uploadPath + "/" + file.getUploadName());
			}
 
			if(v_process.equals("W")) msg = "한 게시물당 최대 " + v_maxfilesize + "MB까지 파일을 올리실 수 있습니다.\\n게시물 등록에 실패하였습니다.";
			else if(v_process.equals("E")) msg = "한 게시물당 최대 " + v_maxfilesize + "MB까지 파일을 올리실 수 있습니다.\\n게시물 수정에 실패하였습니다.";
		}
 
		return mapping.findForward("StudyNoticeBatchWritePop");
	}

이부분 입니다.

public ActionForward studyNoticeBatchWrite이부분에 첨부파일 기능을 넣을려고 하는데 오류가 나네요 jsp페이지에 enctype="multipart/form-data"> 해줬는데 왜 그러죠?

오류 메세지는

java.io.IOException: Posted content type isn't multipart/form-data
at com.oreilly.servlet.multipart.MultipartParser.(MultipartParser.java:166)
at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java:222)
at com.sinc.framework.util.FileUtil.upload(FileUtil.java:731)
at com.sinc.lms.study.StudyNoticeBoardBaction.studyNoticeBatchWritePop(StudyNoticeBoardBaction.java:456)
at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sinc.framework.struts.DispatchAction.dispatchMethod(DispatchAction.java:163)
at com.sinc.framework.struts.StrutsDispatchAction.execute(StrutsDispatchAction.java:58)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:237)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at com.sinc.framework.struts.StrutsReloadActionServlet.process(StrutsReloadActionServlet.java:72)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.sinc.framework.util.CommonInterceptor.doFilter(CommonInterceptor.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.sinc.framework.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

입니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.