package com.example.controller;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import com.example.entity.Item;
import com.example.service.ItemDB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping(value = { "/item" })
public class ItemController {
@Autowired
private ItemDB itemDB;
// resources 하위 폴더 파일을 읽기 위한 객체 생성
// ResourceLoader resource = new ResourceLoader();
@Autowired
private ResourceLoader resource;
@GetMapping(value = "/insert")
public String insertGET() {
return "item/insert";
}
@PostMapping(value = "/insert")
public String insertPOST(
@ModelAttribute Item item,
@RequestParam(name = "image") MultipartFile file) throws IOException {
if (file.isEmpty() == false) { // 첨부됨
item.setFilename(file.getOriginalFilename());
item.setFilesize(file.getSize());
item.setFiletype(file.getContentType());
item.setFiledata(file.getBytes());
}
System.out.println(item.toString());
int ret = itemDB.insertItem(item);
if (ret == 1) {
return "redirect:/item/selectlist";
}
return "redirect:/item/insert";
}
@GetMapping(value = { "/delete" })
public String deleteGET(@RequestParam(name = "code") Long code) {
int ret = itemDB.deleteItem(code);
if (ret == 1) {
return "redirect:/item/selectlist";
}
return "redirect:/item/selectlist";
}
@RequestMapping(value = "/selectlist", method = RequestMethod.GET)
public String selectListGET(Model model,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "text", defaultValue = "") String text) {
if (page == 0) {
return "redirect:/item/selectlist?page=1";
}
// 1. 목록
List<Item> list = itemDB.selectListPageSearchItem(page, text);
// 2. 페이지네이션 개수
long pages = itemDB.selectItemCount();
model.addAttribute("list", list);
model.addAttribute("pages", (pages - 1) / 10 + 1);
return "item/selectlist";
}
@GetMapping(value = "/image")
public ResponseEntity<byte[]> imageGET(@RequestParam(name = "code") Long code) {
try {
Item item = itemDB.selectOneItemImage(code);
if (item.getFilesize() > 0) {
HttpHeaders headers = new HttpHeaders();
if (item.getFiletype().equals("image/jpeg")) {
headers.setContentType(MediaType.IMAGE_JPEG);
} else if (item.getFiletype().equals("image/png")) {
headers.setContentType(MediaType.IMAGE_PNG);
} else if (item.getFiletype().equals("image/gif")) {
headers.setContentType(MediaType.IMAGE_GIF);
}
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
item.getFiledata(), headers, HttpStatus.OK);
return response;
} else { // 이미지가 없는 경우
InputStream stream = resource.getResource("classpath:/static/img/default.png").getInputStream();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
stream.readAllBytes(), headers, HttpStatus.OK);
return response;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@GetMapping(value = "/update")
public String updateGET(Model model, @RequestParam(name = "code") Long code) {
Item item = itemDB.selectOneItem(code);
model.addAttribute("item", item);
return "item/update"; // 표시할 jsp 파일명. 확장자X
}
@PostMapping(value = "/update")
public String updatePOST(@ModelAttribute Item item, @RequestParam(name = "image") MultipartFile file)
throws IOException {
System.out.println(item.toString());
if (file.isEmpty() == false) { // 첨부됨
item.setFilename(file.getOriginalFilename());
item.setFilesize(file.getSize());
item.setFiletype(file.getContentType());
item.setFiledata(file.getBytes());
}
int ret = itemDB.updateItem(item);
if (ret == 1) {
return "redirect:/item/selectlist";
}
// post에서는 jsp표시 X
// redirect를 이용하여 주소 변경
return "redirect:/item/update?code=" + item.getCode();
}
}