Controller

	@Override
	@RequestMapping(value="/addNewGoods.do" , method= RequestMethod.POST)
	public ResponseEntity addNewGoods(MultipartHttpServletRequest multipartRequest, HttpServletResponse response)throws Exception{
		multipartRequest.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		String imageFileName = null;
		
		Map newGoodsMap = new HashMap();
		Enumeration enu = multipartRequest.getParameterNames();
		
		while(enu.hasMoreElements()){
			String name = (String)enu.nextElement();
			String value = multipartRequest.getParameter(name);
			newGoodsMap.put(name, value);
		}
		
		HttpSession session = multipartRequest.getSession();
		MemberVO memberVO = (MemberVO)session.getAttribute("memberInfo");
		String reg_id = memberVO.getMember_id();
		
		List<ImageFileVO> imageFileList = upload(multipartRequest);
		if(imageFileList != null && imageFileList.size() != 0) {
        	//향상된 for문 =>for(대입받을 변수정의 : 배열명)
			for(ImageFileVO imageFileVO : imageFileList) {
				imageFileVO.setReg_id(reg_id);
			}
			newGoodsMap.put("imageFileList", imageFileList);
		}
		
		String message = null;
		ResponseEntity resEntity = null;
		HttpHeaders responseHeaders = new HttpHeaders();
		responseHeaders.add("Content-Type", "text/html; charset=utf-8");
		try {
			int goods_id = adminGoodsService.addNewGoods(newGoodsMap);
			if(imageFileList != null && imageFileList.size() != 0) {
				for(ImageFileVO imageFileVO:imageFileList) {
					imageFileName = imageFileVO.getFileName();
					File srcFile = new File(CURR_IMAGE_REPO_PATH +"\\" + "temp" + "\\" +  imageFileName);
					File destDir = new File(CURR_IMAGE_REPO_PATH +"\\"+goods_id);
					FileUtils.moveFileToDirectory(srcFile, destDir, true);
				}
			}
			message = "<script>";
			message += "alert('작품 등록완료!');";
			message += "location.href='"+multipartRequest.getContextPath()+"/admin/goods/adminGoodsMain.do';";
			message += "</script>";
		}catch(Exception e) {
			if(imageFileList != null && imageFileList.size() != 0) {
				for(ImageFileVO imageFileVO:imageFileList) {
					imageFileName = imageFileVO.getFileName();
					File srcFile = new File(CURR_IMAGE_REPO_PATH+"\\"+"temp"+"\\"+imageFileName);
					srcFile.delete();
				}
			}
			message="<script>";
			message +=" alert('오류가 발생했습니다. 다시 시도해 주세요');";
			message +=" location.href='"+multipartRequest.getContextPath()+"/admin/goods/addNewGoodsForm.do';";
			message +="</script>)";
			e.printStackTrace();
		}
		resEntity = new ResponseEntity(message, responseHeaders, HttpStatus.OK);
		return resEntity;
	}
  • ResponseEntity는 Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다. 
  • while문을 사용하여 값들을 Map에 저장한다.
  • upload메서드를 통해 첨부한 이미지의 정보를 가져옵니다.
  • 첫 if , for문을 통하여 이미지 정보에 id속성으로 추가합니다.
  • adminGoodsService.addNewGoods(newGoodsMap) :상품정보와 이미지 정보를 테이블에 추가 합니다.
  • try 부분 if, for문을 통해 업로드한 이미지를 상품번호 폴더에 저장합니다.

Service

	@Override
	public int addNewGoods(Map newGoodsMap)throws Exception{
		int goods_id = adminGoodsDAO.insertNewGoods(newGoodsMap);
		ArrayList<ImageFileVO> imageFileList = (ArrayList)newGoodsMap.get("imageFileList");
		for(ImageFileVO imageFileVO:imageFileList) {
			imageFileVO.setGoods_id(goods_id);
		}
		adminGoodsDAO.insertGoodsImageFile(imageFileList);
		return goods_id;
	}
  • for문을 통해 각 이미지 정보에 상품 번호를 설정
  • 이미지 와 글에 대한 값들을 따로 선언하였다.

DAO

	@Override
	public int insertNewGoods(Map newGoodsMap)throws DataAccessException{
		sqlSession.insert("mapper.admin.goods.insertNewGoods", newGoodsMap);
		return Integer.parseInt((String)newGoodsMap.get("goods_id"));
	}
	
	@Override
	public void insertGoodsImageFile(List fileList)throws DataAccessException{
		for(int i=0; i<fileList.size(); i++) {
			ImageFileVO imageFileVO = (ImageFileVO)fileList.get(i);
			sqlSession.insert("mapper.admin.goods.insertGoodsImageFile",imageFileVO);
		}
	}

Mapper

	<insert id="insertNewGoods" parameterType="java.util.Map">
		<selectKey resultType="String" keyProperty="goods_id"
			order="BEFORE">
			select seq_goods_id.nextval from dual
		</selectKey>
		<![CDATA[
		   insert into gallery_collectible(
		               					goods_id, 
                   						goods_title,
										goods_year,
										goods_no,
										goods_author,
										goods_stuff,
										goods_standard,
										goods_note,
										goods_status,
										goods_fileName					
										)
					  			values(
					  			      #{goods_id},
					  			      #{goods_title},
					  			      #{goods_year},
					  			      #{goods_no},					  			     
					  			      #{goods_author },
					  			      #{goods_stuff},
					  			      #{goods_standard},
					  			      #{goods_note},
					  			      #{goods_status},	
					  			      #{goods_fileName}
					 			 )
		]]>
	</insert>

Jsp

	<form action="${contextPath}/admin/goods/addNewGoods.do" method="post" enctype="multipart/form-data">
		<div class="tab_container">
			<!-- 내용 들어 가는 곳 -->
			<div class="tab_container" id="container">
				<ul class="tabs">
					<li><a href="#tab1">작품 등록</a></li>
				</ul>
				<div class="tab_container">
					<div class="tab_content" id="tab1">
						<table>

							<tr>
								<td>작품명</td>
								<td><input name="goods_title" type="text" size="40" /></td>
							</tr>

							<tr>
								<td>등록번호</td>
								<td><input name="goods_no" type="text" size="40" /></td>
							</tr>
							<tr>
								<td>작가</td>
								<td><input name="goods_author" type="text" size="40" /></td>
							</tr>
							<tr>
								<td>제작년도</td>
								<td><input name="goods_year" type="text" size="40" /></td>
							</tr>

							<tr>
								<td>재료 및 기법</td>
								<td><input name="goods_stuff" type="text" size="40" /></td>
							</tr>


							<tr>
								<td>작품규격</td>
								<td><input name="goods_standard" type="text" size="40" /></td>
							</tr>

							<tr>
								<td>작품내용</td>
								<td>
								 <textarea rows="20" cols="60"  name="goods_note"  id="i_note" /></textarea></td>
							</tr>
							<tr>
								<td>작품종류</td>
								<td><select name="goods_status">
										<option value="collectible">작품</option>
								</select></td>
							</tr>
							<tr>
								<td align="right">이미지파일 첨부</td>

								<td align="left"><input type="button" value="파일 추가"
									onClick="fn_addFile()" /></td>
								<td>
									<div id="d_file"></div>
								</td>
							</tr>
							<tr>
								<td><br></td>
							</tr>
						</table>
					</div>
				</div>
			</div>
			<div class="clear"></div>

			<table>
				<tr>
					<td align=center>
					 <input type="button" value="상품 등록하기" onClick="fn_add_new_goods(this.form);">
					</td>
				</tr>
			</table>

		</div>
	</form>
  • enctype = 'multipart/form-data' 부분은 웹에서 파일을 전송할 때 사용

script

<script type="text/javascript">
  var cnt=0;
  function fn_addFile(){
	  if(cnt == 0){
		  $("#d_file").append("<br>"+"<input  type='file' name='main_image' id='f_main_image' />");	  
	  }
  }
  
  
  function fn_add_new_goods(obj){
		 fileName = $('#f_main_image').val();
		 if(fileName != null && fileName != undefined){
			 obj.submit();
		 }else{
			 alert("메인 이미지는 반드시 첨부해야 합니다.");
			 return;
		 }
		 
	}
  function goPage() { 
	  location.href="${contextPath}/collectible/collectibleList.do"; 
	}
</script>
  • 이미지 등록에 대한 스크립트
  • 작성 시 이미지 파일을 등록하지 않으면 메시창 띄우고 return을 시키며
  • 이미지를 추가시키면 html(<div id="d_file"></div>) 이부분 에 이미지가 노출이 되게 함.
복사했습니다!