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>) 이부분 에 이미지가 노출이 되게 함.
'Spring > Study' 카테고리의 다른 글
[Spring]이미지 게시판 만들기 - 수정 (0) | 2022.01.23 |
---|---|
[Spring]이미지 게시판 만들기 - 삭제 (0) | 2022.01.23 |
[Spring]이미지 게시판 만들기 - 목록&상세보기 (0) | 2022.01.23 |
[Spring]게시판 만들기 - 수정 (0) | 2022.01.23 |
[Spring]게시판 만들기- 삭제 (0) | 2022.01.23 |