web

이미지 업로드

Clearing 2022. 8. 29. 22:40
728x90

html 파일을 통해 이미지를 업로드하기 위해서는 Multipart 객체를 사용하기 위해 cos.jar 파일이 필요하다.

 

업로드를 예시를 위한 .jsp 파일

text 박스에 입력한 값은 mid, file 박스에 입력한 값은 fileName으로 전달

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>이미지 업로드</title>
</head>
<body>

<form action="test.do" method="post" enctype="multipart/form-data">
	<input type="text" name="mid">
	<input type="file" name="fileName">
	<input type="submit" value="확인">
</form>

<hr>

<img alt="${img}" src="images/${img}">

</body>
</html>

 

.jsp 파일에서 넘어온 값을 전달해 줄 servlet 파일

전달받은 파일을 저장할 경로를 프로젝트가 저장되어 있는 경로로 지정해준다.

이후 MultipartRequest 객체(mr이라 명명)를 생성하여 저장 경로, 파일 최대 크기, 인코딩 등을 설정해준다.

(MultipartRequest 클래스는 기본 생성자가 없다.)

이후 mr객체에 저장되어 있는 Parameter 값을 꺼낼 수 있고, Enumeration 컬렉션 프레임워크를 통해

mr 객체가 가지고 있는 파일 정보를 확인할 수 있다.

package test;

import java.io.IOException;

import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;


@WebServlet("/test.do")
public class Test extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public Test() {
        super();
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		String path="D:\\0607Park\\workspace\\day54\\src\\main\\webapp\\images";
		int maxSize=100000; // 바이트 단위
		MultipartRequest mr = new MultipartRequest(request,path,maxSize,"UTF-8",new DefaultFileRenamePolicy());
		
		String mid = mr.getParameter("mid");
		System.out.println("로그1 "+mid);
		
		Enumeration<?> file = mr.getFileNames();
		
		if(file.hasMoreElements()) {
			String paramName = (String)file.nextElement();
			System.out.println("로그2(파라미터명) "+paramName);
			
			String serverFileName = mr.getFilesystemName(paramName);
			System.out.println("로그3(서버에 업로드된 파일명) "+serverFileName);
			request.getSession().setAttribute("img", serverFileName);
			
			String clientFileName = mr.getOriginalFileName(paramName);
			System.out.println("로그3(사용자가 업로드한 파일명) "+clientFileName);
			
			String fileType = mr.getContentType(paramName);
			System.out.println("로그4(파일의 타입) "+fileType);
			
			long length = mr.getFile(paramName).length();
			System.out.println("로그5(파일의 크기) "+length); // 바이트 단위
		}
		
			response.sendRedirect("NewFile.jsp");
	}

}

 

수행 결과

 

console창에 표현된 로그

728x90

'web' 카테고리의 다른 글

이미지 미리보기  (0) 2022.08.30
Ajax 이용하여 아이디 중복검사하기  (0) 2022.08.25
JSP - MVC 모델 2  (0) 2022.08.23
JSP 태그 활용  (0) 2022.08.22
필터(Filter)  (0) 2022.08.21