ItemController.java

팡태(❁´◡`❁)·2022년 3월 7일
0

java

목록 보기
26/36
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();
    }
}

0개의 댓글