[JSP] 파일 업로드 및 조회

2023. 4. 6. 20:00·Java/JSP
728x90
728x90

#  관련 포스팅

  - 파일 업로드 : https://young0105.tistory.com/178

 


 

오늘 배운 파일 업로드 방법을 복습할 겸 전자 도서관 프로젝트에 이미지 리뷰 기능을 추가했다.

 

#  이미지를 포함한 리뷰 작성

더보기

Controller

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
        // 리뷰 작성
        } else if ("writeReview".equals(action)) {
            int bookId = Integer.parseInt(request.getParameter("bookId"));
            int star = Integer.parseInt(request.getParameter("star"));
            String title = request.getParameter("title");
            String content = request.getParameter("content");
            Part filePart = request.getPart("file");
            
            int responseType = 0;
            // 도서명을 선택하지 않았다면 (-1)
            if (bookId == -1) {
                responseType = 2;
            } else {
                ReviewDTO reviewDto = new ReviewDTO(userId, bookId, star, title, content);
                responseType = reviewService.writeReview(reviewDto);
                
                // 이미지가 있다면
                if (filePart.getSubmittedFileName().equals("") == false) {
                    InputStream fileContent = filePart.getInputStream();
                    OutputStream outputStream = null;
                    try {
                        UUID uuid = UUID.randomUUID();
                        String uuidImage = uuid + "_" + filePart.getSubmittedFileName();
                        
                        String imgDir = getServletContext().getInitParameter("imgDir");
                        
                        File file = new File(imgDir, uuidImage);
                        outputStream = new FileOutputStream(file);
                        byte[] buffer = new byte[1024];
                        int length;
                        while ((length = fileContent.read(buffer)) != -1) {
                            outputStream.write(buffer, 0, length);
                        }
                        
                        // DB에 저장
                        ReviewDTO dto = reviewService.selectReviewByUserAndBook(userId, bookId);
                        int reviewId = dto.getId();
                        String originImage = filePart.getSubmittedFileName();
                        // uuidImage
                        
                        ReviewImageDTO reviewImageDTO = new ReviewImageDTO(reviewId, originImage, uuidImage);
                        reviewService.insertReviewImage(reviewImageDTO);
                        
                    } catch (Exception e) {
                        System.out.println("파일 이상");
                    } finally {
                        fileContent.close();
                        outputStream.flush();
                        
                        if (outputStream != null) {
                            outputStream.close();
                        }
                    }
                }
            }
            request.setAttribute("responseReview", responseType);
            // main.jsp로
Colored by Color Scripter
cs

 

DAO

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    @Override
    public int insert(ReviewImageDTO reviewImageDTO) {
        int resultCount = 0;
        String sql = " INSERT INTO review_image VALUES (?, ?, ?) ";
        PreparedStatement pstmt = null;
        
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, reviewImageDTO.getReviewId());
            pstmt.setString(2, reviewImageDTO.getOriginImage());
            pstmt.setString(3, reviewImageDTO.getUuidImage());
            resultCount = pstmt.executeUpdate();
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return resultCount;
    }
Colored by Color Scripter
cs

 

 

#  이미지 리뷰 조회

더보기

리뷰 조회 (이미지 포함 리뷰, 미포함 리뷰 구분)

 

1
2
3
4
5
6
7
8
9
<c:choose>
    <c:when test="${imageName != null}">
        <textarea cols="56" rows="10" readonly="readonly" class="content">${review.content}</textarea>                                
        <img alt="리뷰 이미지" src="/library/images/uploadImages/${imageName}" style="width: 212px; height: 262px; margin-left: 30px; border:1px solid gray">            
    </c:when>
    <c:otherwise>
        <textarea cols="83" rows="10" readonly="readonly" class="content">${review.content}</textarea>                                
    </c:otherwise>
</c:choose>
Colored by Color Scripter
cs

 

DAO

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    @Override
    public ReviewImageDTO select(int reviewId) {
        ReviewImageDTO reviewImageDTO = null;
        String sql = " SELECT * FROM review_image WHERE review_id = ? ";
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, reviewId);
            rs = pstmt.executeQuery();
            
            while (rs.next()) {
                reviewImageDTO = new ReviewImageDTO();
                reviewImageDTO.setReviewId(rs.getInt("review_id"));
                reviewImageDTO.setOriginImage(rs.getString("origin_image"));
                reviewImageDTO.setUuidImage(rs.getString("uuid_image"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                pstmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return reviewImageDTO;
    }
Colored by Color Scripter
cs

 

 

ReviewImage 테이블을 따로 만들어서, review_id를 외래키로 받아 기본키로 사용하고

기존 파일명과 UUID가 포함된 파일명을 각각 테이블에 저장했다.

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > JSP' 카테고리의 다른 글

[JSP] 웹 컨테이너 (Web Container)  (0) 2023.06.18
[JSP] 외부 라이브러리 없이 파일 업로드하기  (0) 2023.04.06
[JSP] 필터 (Filter)  (0) 2023.04.06
[JSP] 쿼리 파라미터 방식 (쿼리 스트링)  (0) 2023.04.05
[JSP] Java web으로 SQL CRUD 구현하기  (0) 2023.03.28
'Java/JSP' 카테고리의 다른 글
  • [JSP] 웹 컨테이너 (Web Container)
  • [JSP] 외부 라이브러리 없이 파일 업로드하기
  • [JSP] 필터 (Filter)
  • [JSP] 쿼리 파라미터 방식 (쿼리 스트링)
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (383)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (10)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (14)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    SQL
    jsp
    java
    jQuery
    티스토리챌린지
    vuejs
    git
    SEO
    Swing
    Codeigniter
    errorNote
    SpringBoot
    Hotkeys
    typeScript
    면접
    CSS
    C#
    tailwindcss
    js
    http
    개발일지
    zapier
    Android
    Wordpress
    오블완
    HTML
    php
    cs
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[JSP] 파일 업로드 및 조회
상단으로

티스토리툴바