๐ŸŽฎ [JSP] | [์‚ฌ์ง„ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ] | ์ฝ”๋“œ ์ƒ์„ธ ์„ค๋ช…

@WebServlet("/user/mypage")
public class UserMypageServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		MyUtils.openJSP("๋งˆ์ดํŽ˜์ด์ง€", "user/userMypage", request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String uploadPath = request.getServletContext().getRealPath("/res/img");
		int maxFileSize = 10_485_760; // 10 * 1024 * 1024 (10mb)
		
		System.out.println("uploadPath : " + uploadPath);
		try {
                //jsp์—์„œ form์—์„œ ์—…๋กœ๋“œํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด postํ˜•์‹์œผ๋กœ "ํŒจํ‚ท"๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ์„œ 
        //formํƒœ๊ทธ์˜ enctype="multipart/form-date" ๋•Œ๋ฌธ์— "ํŒจํ‚ท"๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 
        //์„œ๋ธ”๋ ›์œผ๋กœ ์˜ค๊ณ  multi์—์„œ ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ๋ถ™์—ฌ์„œ ํŒŒ์ผํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค 
        // ๋‹ค์ค‘ํŒŒ์ผ ์—…๋กœ๋“œ๋Š” formํƒœ๊ทธ์˜ multiple ์†์„ฑ ์ด๊ฑฐ ํ•˜๋‚˜๋งŒ ๋ง๋ถ™์—ฌ ์ค€๋‹ค. 
        // ํ•˜์ง€๋งŒ ๋ฐฑ์—”๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํž˜๋“ค์–ด์ง„๋‹ค.
        // request, ์ €์žฅ๊ฒฝ๋กœ(uploadPath(ํ†ฐ์บฃ ํ™œ๋™ํ•˜๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ)+"/temp"), ํŒŒ์ผํฌ๊ธฐ์ง€์ •, ์ธ์ฝ”๋”ฉ, ๋™์ผํ•œ ํŒŒ์ผ๋ช… ์žˆ์œผ๋ฉด renameํ•ด์ฃผ๋Š” ๊ฐ์ฒด-ํŒŒ์ผ1,ํŒŒ์ผ2..์ด๋Ÿฐ์‹์œผ๋กœ)
			MultipartRequest multi = new MultipartRequest(request, uploadPath + "/temp", maxFileSize
					, "UTF-8", new DefaultFileRenamePolicy());

			//multi.getFilesystemName(" "); ๋งŒ์•ฝ ํŒŒ์ผ๋ช…์ด rename๋๋‹ค๋ฉด ๊ทธ ์ด๋ฆ„์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜จ๋‹ค.
			String fileNm = multi.getFilesystemName("profileImg");
			System.out.println("fileNm: " + fileNm);
			
			if(fileNm == null) {
				doGet(request, response);
				return;
			}
			
			UserEntity loginUser = MyUtils.getLoginUser(request);
			int loginUserPk = loginUser.getIuser();
			
			String targetFolder = uploadPath + "/user/" + loginUserPk;		
			MyFileUtils.delFolder(targetFolder); //ํด๋” ์‚ญ์ œ
			
			File folder = new File(targetFolder);
            // ์ ˆ๋Œ€ ๊ฒฝ๋กœ์— ์—†๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
			folder.mkdirs();
					
			//ํ™•์žฅ์ž๋ฅผ ์–ป์–ด์˜ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ๋‘ ์ค„
			int lastDotIdx = fileNm.lastIndexOf(".");
			String ext = fileNm.substring(lastDotIdx); //ํ™•์žฅ์ž ๊ตฌํ•จ		
			//String ext2 =  fileNm.substring(fileNm.lastIndexOf(".") + 1);
			
                    //ํŒŒ์ผ ์ด๋ฆ„์ด ํ•œ๊ธ€๋กœ ๋“ค์–ด์™”์„ ๋•Œ ๊ทธ๊ฑธ ๋‹ค์‹œ ์˜์–ด์™€ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ
       // ์“ฐ๋Š” ๊ฒƒ์ด UUTID์ด๋‹ค ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ํ™•์žฅ์ž๋ช…๋„ ๋ฐ”๋€Œ๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ lastDotIdx๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. 
			String newFileNm = UUID.randomUUID().toString() + ext;
			
			File imgFile = new File(uploadPath + "/temp/" + fileNm);
            //์›ํ•˜๋Š” ์œ„์น˜์™€ ํŒŒ์ผ๋ช…์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
        //์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•˜๋ฉด ์ €์žฅ๋˜๋Š” ๊ณณ์€ temp์ด๊ณ  
        //์ตœ์ข…์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ณณ์€ iuser์ด๋‹ค
			imgFile.renameTo(new File(targetFolder + "/" + newFileNm));
			
			UserEntity param = new UserEntity();
			param.setIuser(loginUserPk);
			param.setProfileImg(newFileNm);
			
			UserDAO.updUser(param);		
			loginUser.setProfileImg(newFileNm);
		} catch(Exception e) {
			e.printStackTrace();
		}
		doGet(request, response);
	}

}

String uploadPath = request.getServletContext().getRealPath("/res/img");

application์€ servletContextํƒ€์ž…์˜ ๊ฐ์ฒด์ฃผ์†Œ๊ฐ’
์ด application์ด jsp 4๊ฐ€์ง€์˜ ๋‚ด์žฅ๊ฐ์ฒด ์ค‘ appliction ๊ทธ๊ฒƒ์ด๋‹ค.

getRealPath() -> ์‹ค์ œ ํ†ฐ์บฃ์ด ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š” ์ปดํ“จํ„ฐ์—์„œ ๊ทธ ๊ณณ์˜ ์ ˆ๋Œ€ ์ฃผ์†Œ๊ฐ’ ๋ฆฌํ„ด
(" ") -> ์—ฌ๊ธฐ๋‹ค๊ฐ€ Img ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’๊นŒ์ง€ ๊ตฌ์ฒดํ™”ํ•œ๋‹ค. ์ฆ ์ ˆ๋Œ€ ์ฃผ์†Œ๊ฐ’์— ๋” ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

// ์‚ฌ์ง„์€ ํด๋”์— ์žˆ๋Š” ๊ฒƒ๋งŒ ์ง€์šฐ๋ฉด ๋œ๋‹ค. DB์—๋Š” ํ•˜๋‚˜๋งŒ ์ €์žฅ๋œ๋‹ค.

//jsp
//.files.length๋ฅผ ๋ถ™์ด๋Š” ์ด์œ ๋Š” 'ํŒŒ์ผ์„ ํƒ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์„ ํƒ๋œ ํŒŒ์ผ๋“ค์ด ๋ฐฐ์—ด๋กœ ๋“ค์–ด์˜ค๊ธฐ ๋–„๋ฌธ์ด๋‹ค.
// ์ง€๊ธˆ์€ ํ•˜๋‚˜๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 1๋งŒ ๋“ค์–ด์˜ค๊ฒ ์ง€
// ์•„๋ฌด๊ฒƒ๋„ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด 0์ด ๋˜๊ฒ ์ง€
// ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ง‰๋Š” ๊ฒƒ์€ ๋ฌด๋ ฅํ•˜๋‹ค ๋ฒก์—”๋“œ์—์„œ ์ œ๋Œ€๋กœ ๋ง‰์•„์•ผ์ง€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค -> ๊ทธ๋ž˜์„œ try catch๋กœ ๊ฐ์‹ผ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ํ„ฐ์งˆ ๊ฒƒ ๊ฐ™์€ ์ฝ”๋“œ๋“ค์„ ๊ฐ์‹ผ๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜๋ผ... ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๊ณต๋ถ€ํ•ด์•ผํ•˜๋Š”๋Ž… ใ…Žใ…Ž ...
์žฌ๊ท€ํ•จ์ˆ˜

profile
๋ช‡ ๋ฒˆ์„ ๋„˜์–ด์ ธ๋„ ์•ž์œผ๋กœ ๊ณ„์† ๋‚˜์•„๊ฐ€์ž

0๊ฐœ์˜ ๋Œ“๊ธ€