Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 백준
  • Javascript
  • java
  • 파이썬온라인
  • 시작일종료일
  • 서버등록
  • CSS
  • Database
  • spring
  • 오류해결
  • 창초기화
  • 기간쿼리
  • SQLD합격후기
  • 노마드코더
  • colaboratory
  • 연습문제
  • sql기간
  • 코딩앙마
  • 비쥬얼스튜디오코드
  • Eclipse
  • HTML
  • 독학후기
  • 콜라보레이토리
  • 기간설정
  • oracle
  • googlecolaboratory
  • SQL
  • 이것이자바다
  • AllArgsConstructor
  • SQLD합격

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[84일차 - 2] CKEditor 내 이미지 업로드 작업 / 상품 이미지 등록 세팅
🏫 Open API_JAVA

[84일차 - 2] CKEditor 내 이미지 업로드 작업 / 상품 이미지 등록 세팅

2022. 11. 23. 20:25
728x90

20221122(화)

  • 목차
    - CKEditor 내 이미지 업로드 작업
    - 상품 이미지 등록 세팅

< CKEditor 내 이미지 업로드 작업 >

  • 요청방식 post 확인 / name : upload 확인

 

서버로 전송 버튼 클릭했을 때 아래 빨간박스 주소로 전송되도록 만들어 놨다.


1. AdProduct 컨트롤러 코드추가

//CKEditor에서 사용하는 파일업로드. <input type = "file" name = "upload">
@PostMapping("/imageUpload")
public void imageUpload(HttpServletRequest req, HttpServletResponse res, MultipartFile upload) {

    OutputStream out = null;
    PrintWriter printWriter = null;

    res.setCharacterEncoding("utf-8");
    res.setContentType("text/html; charset=utf-8");

    try {
        String fileName = upload.getOriginalFilename();  // 클라이언트에서 보낸 원본파일이름.
        byte[] bytes = upload.getBytes(); 	// 업로드된 파일을 가르키는 byte 배열.

        // CKEditor를 통하여 업로드되는 서버측의 폴더
        String uploadPath = "C:/dorothydatabase/upload/ckeditor/" + fileName;

        // 1) 출력스트림을 이용하여, 업로드 작업을 진행함.
        out = new FileOutputStream(new File(uploadPath));
        out.write(bytes);
        out.flush();
        // out.close();

        // 2) 업로드된 파일정보를 CKEditor에게 보내는 작업. // ckeditor에서 사용할 경로
        printWriter = res.getWriter();
        String fileUrl = "/upload/" + fileName;

        // 파일정보를 json 포맷으로 준비해야 한다. " 큰따옴표를 내용으로 코딩 할 경우에는 \"로 사용
        // {"filename":"abc.gif", "uploaded":1, "url":"/upload/abc.gif"} CKEditor 4.x version에서 요구하는 json포맷
        printWriter.println("{\"filename\" : \"" + fileName + "\", \"uploaded\" : 1, \"url\" : \"" + fileUrl + "\"}");
        printWriter.flush();


    }catch(Exception ex) {
        ex.printStackTrace();
    }finally {
        if(out != null) {
            try {
                out.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }
        if(printWriter != null) {
            printWriter.close();
        }
    }
}

2. pom.xml에 내용 추가하기

    ➡ 도로시는 서블릿을 활용한 1번 방법으로 진행

<!-- 스프링 파일업로드 -->
<!-- 
1) Servlet 3.0 Multipart Request : 파일업로드 라이브러리가 필요없다. 업로드 관련 기능을 내부적으로 지원한다. (개발)
    - standardServletMultipartResolver
    - servlet-context.xml :
        <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />
    - web.xml
        <servlet>
            <multipart-config>
                <max-file-size>209715200</max-file-size>
                <max-request-size>209715200</max-request-size>
                <file-size-threshold>0</file-size-threshold>
            </multipart-config>
        </servlet>

2) Apache Commons FileUpload API : 파일업로드 라이브러리가 필요하다.
    - CommonsMultipartResolver
    - servlet-context.xml
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="10485760"/>
            <property name=“maxUploadSizePerFile" value="10485760”/>
            <property name="maxInMemorySize" value=“0"/>
        </bean>

    - pom.xml
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
 -->

첫번째 방법으로 진행

(1) servlet-context.xml

(2) web.xml에 코드추가

 

ex) 실행화면

 

✨ 업로드로 사용한 폴더 추가작업

      Servers > 톰캣 > server.xml

 

  • 프로젝트 외부폴더 설정 및 추가된 모습 확인가능

 

ex) 실행화면


 

 


< 상품 이미지 등록 >

0. SQL 테이블생성

-- 4. 상품 테이블
CREATE TABLE PRODUCT_TBL(
    PDT_NUM             NUMBER                  CONSTRAINT PK_PRODUCT_NUM PRIMARY KEY,
    CATE_CODE           NUMBER                  NOT NULL,
    CATE_CODE_PRT       NUMBER                  NOT NULL,
    PDT_NAME            VARCHAR2(50)            NOT NULL,
    PDT_PRICE           NUMBER                  NOT NULL,
    PDT_DISCOUNT        NUMBER                  NOT NULL,
    PDT_COMPANY         VARCHAR2(30)            NOT NULL,
    PDT_DETAIL          VARCHAR2(4000)          NOT NULL,
    PDT_IMG_FOLDER      VARCHAR2(100)           NOT NULL,
    PDT_IMG             VARCHAR2(100)           NOT NULL,
    PDT_AMOUNT          NUMBER                  NOT NULL,
    PDT_BUY             CHAR(1) DEFAULT 'Y'     NOT NULL,
    PDT_DATE_SUB        DATE DEFAULT SYSDATE    NOT NULL,
    PDT_DATE_UP         DATE DEFAULT SYSDATE    NOT NULL
);

-- 상품테이블 시퀀스
CREATE SEQUENCE SEQ_PRODUCT_NUM;

1. ProductVO.java 

    14개 필드 + 파일업로드 필드

 

 

2. AdProductController.java

 

3. servlet-context.xml에 코드추가 ( bean 생성)

4. Controlelr에upload 폴더 주입

 


< 업로드 작업 - 1 >

 

1. com.docmall.util 패키지 생성 ➡ FileUtils.java 생성

날짜폴더 생성 및 운영체제 경로의 구분자에 맞게 리턴하는 작업

  • File.separator는 운영체제별 각 환경에서 동작하도록 작업이된다.
  • 내pc에서만 동작시킬 것이 아니다!!

 

2. FileUtils.java 코드 추가

package com.docmall.util;

import java.io.File;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import org.springframework.web.multipart.MultipartFile;

// 컨트롤러에서 호출할 목적으로 생성.
public class FileUtils {
	//상품이미지파일에 대한 업로드작업
	/*
	 1.날짜폴더 생성해서 파일관리
	 2.Thumnail 이미지생성 : 이미지파일
	 3. 일반파일과 이미지파일 구분작업
	 4. byte[]배열로 다운로드. 
	 */
	
	//파일업로드 작업.   C:\\doccomsa\\upload\\goods\\2022\\11\\22
	public static String uploadFile(String uploadFolder, String uploadDateFolderPath, MultipartFile uploadFile) {
		
		String uploadFileName = ""; // 실제 업로드한 파일명.
		
		// File클래스 : 파일과 폴더 작업을 하는 목적
		
		// 폴더정보
		File uploadPath = new File(uploadFolder, uploadDateFolderPath);
		
		//폴더 존재여부
		if(uploadPath.exists() == false) {
			uploadPath.mkdirs();  //존재 하지않으면, 하위(자손)폴더까지 한번에 생성됨.
		}
		
		//클라이언트에서 업로드한 파일명.
		String uploadClientFileName = uploadFile.getOriginalFilename();
		
		//중복되지 않는 고유의 문자열 생성
		UUID uuid = UUID.randomUUID();
		
		//업로드시 중복되지 않는 파일이름을 생성
		uploadFileName = uuid.toString() + "_" + uploadClientFileName;
		
		try {
			// 파일정보
			File saveFile = new File(uploadPath, uploadFileName);
			uploadFile.transferTo(saveFile);  // 서버의 폴더에 파일복사.(업로드)
			
			//Thumnail 작업.
			
			
		}catch(Exception ex) {
			ex.printStackTrace();
		}
		
		return uploadFileName;
		
	}
	
	
	//날짜폴더 생성및 운영체제 경로의 구분자에 맞게 리턴.
	public static String getFolder() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		Date date = new Date();
		
		String str = sdf.format(date); // "2022-11-22"
		
		//1)리눅스 또는 맥은 구분자 / : "2022-11-22" -> "2022/11/22"
		//2)윈도우즈 \ : "2022-11-22" -> "2022\11\22"
		
		return str.replace("-", File.separator);
	}
	
	// 일반파일 또는 이미지파일 구분
	private static boolean checkImageType(File saveFile) {
		
		boolean isImage = false;
		
		try {
			// MIME : text/html, text/plain, image/jpeg
			String contentType = Files.probeContentType(saveFile.toPath()); 
			
			isImage = contentType.startsWith("image");
		}catch(Exception ex) {
			ex.printStackTrace();
		}
		
		return isImage;
		
	}

}
728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[85일차 - 2] 썸네일 크기조절 / 상품 목록 이미지 보여주기 / 특수문자 서버 전달 시 에러 / 검색 기능 추가  (0) 2022.11.24
[85일차 - 1] 썸네일 이미지 / 상품 정보 저장 / 상품 이미지 미리보기 / 상품 목록보기  (0) 2022.11.23
[84일차 - 1] CKEditor / 카테고리 목록 선택  (0) 2022.11.22
[83일차] 메일링 폴더 생성 / 구역별 JSP 나누기 / 관리자 (로그인)  (0) 2022.11.22
[82일차-2] 아이디 & 비번찾기 / 비번찾기 : 임시비밀번호 발급  (0) 2022.11.21
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [85일차 - 2] 썸네일 크기조절 / 상품 목록 이미지 보여주기 / 특수문자 서버 전달 시 에러 / 검색 기능 추가
    • [85일차 - 1] 썸네일 이미지 / 상품 정보 저장 / 상품 이미지 미리보기 / 상품 목록보기
    • [84일차 - 1] CKEditor / 카테고리 목록 선택
    • [83일차] 메일링 폴더 생성 / 구역별 JSP 나누기 / 관리자 (로그인)
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바