추가

업로드가 생긴걸 볼수 있다. 

 

//pom.xml


	<!-- JSON객체를 만들어서 사용할때 (CKEditor 업로드 예제) -->
			<dependency>
				<groupId>com.google.code.gson</groupId>
				<artifactId>gson</artifactId>
				<version>2.8.2</version>
			</dependency>

maven -> update project

//imageUpload.java

package kr.or.ddit.controller.crud.notice;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

@Controller
public class ImageUpload {
	//CKEditor 본문 내용에 이미지 업로드 하기 
	@RequestMapping(value="/imageUpload.do")
	public String imageUpload(MultipartHttpServletRequest multiFile,
		  HttpServletRequest req, HttpServletResponse resp) throws IOException {
		// CKEditor4 특정버전 이후부터 html형식의 데이터를 리턴하는 방법에서 json데이터를 구성해서 리턴하는 방식으로 변경됨
		JsonObject json =new JsonObject(); // JSON 객체를 만들기위한준비
		
		PrintWriter printWriter = null; //외부 응답으로 내보낼때 사용할 객체
		OutputStream out =null; // 본문 내용에 추가한 이미지를 파일로 생성할 객체
		long limitSize = 1024 * 1024 * 2; // 업로드 파일 최대 크기(2MB)
		
		//CKEditor 본문 내용에 이미지를 업로드 해보면 'upload'라는 키로 파일 데이터가 전달되는걸 확인할 수 있습니다. 
		MultipartFile file = multiFile.getFile("upload");
		
		if(file != null && file.getSize() > 0 && StringUtils.isNotBlank(file.getName())) {
			
			//데이터 Mime타입이 'image/'를 포함한 이미지 파일인지 체크 
			if(file.getContentType().toLowerCase().startsWith("image/")) {
				if(file.getSize() > limitSize) { //업로드 한 파일 사이즈가 최대 크기보다 클 때
					
					/*
					 * {
					 *    "uploaded" : 0,
					 *    "error" : [
					 *    		{
					 *         "message" : "2MB미만의 이미지만 업로드 가능합니다. "
					 *         
					 *      }
					 *    ]
					 * }
					 * 
					 */
					JsonObject jsonMsg = new JsonObject();
					JsonArray jsonArr = new JsonArray();
					jsonMsg.addProperty("message", "2MB미만의 이미지만 업로드 가능합니다.");
					jsonArr.add(jsonMsg);
					json.addProperty("uploaded", 0);
					json.add("error", jsonArr.get(0));
					
					resp.setCharacterEncoding("UTF-8");
					printWriter = resp.getWriter();
					printWriter.println(json);
					
					
				}else { // 정상 범위 내 파일 일 때
					/*
					 * {
					 *    "uploaded" :1,
					 *    "fileName" : "XXXXXXXX-XXXXXXXX.jpg",
					 *    "url" : "/resources/img/XXXXXXXX-XXXXXXXX.jpg"
					 *  }
					 *
					 */
					
					try {
						String fileName = file.getName(); //파일명 얻어오기
						byte[] bytes =file.getBytes(); // 파일 데이터 열어오기
						String uploadPath = req.getServletContext().getRealPath("/resources/img");
						
						//업로드 경로로 설정한 폴더구조가 존재하지 않는 경우, 파일을 복사할 수 있으므로
						//폴더 구조가 존재하지않는 경우 생성하고 존재하는 경우 건너 뜀
						File uploadFile = new File(uploadPath);
						if(!uploadFile.exists()) {
							uploadFile.mkdirs();
						}
							fileName = UUID.randomUUID().toString() + "_" +fileName;
							uploadPath = uploadPath + "/" +fileName; // 업로드 경로 + 파일명 
							out = new FileOutputStream(new File(uploadPath));
							out.write(bytes); // 파일복사 
							
							printWriter =resp.getWriter();
							String fileUrl = req.getContextPath() + "/resources/img/" + fileName;
							
							json.addProperty("uploaded", 1);
							json.addProperty("fileName", fileName);
							json.addProperty("url", fileUrl);
							
							//위 형식의 Json데이터를 출력한다.
							printWriter.println(json);
					} catch (IOException e) {
						e.printStackTrace();
						
					}finally {
						if(out !=null) {
							out.close();
						}
						if(printWriter != null) {
							printWriter.close();
						}
					}
				}
				
			}
		}
		
		return null;
	}
}

서버로 전송 누르고 확인을 누르면

 

글작성완료

 

이제 2.메가 이상올려도 상관이 없다

'대덕인재개발원 > Spring' 카테고리의 다른 글

svn설정  (0) 2024.06.10
인터셉터  (0) 2024.06.05
0604 트랜잭션  (0) 2024.06.04
0527 스프링  (0) 2024.05.27
0514 스프링2 환경설정  (0) 2024.05.14

+ Recent posts