서버11_파일 제출

charl hi·2021년 12월 20일
0

서버

목록 보기
11/15
  • index.jsp

  • FileTestController.java

->

  • ✨✨파일같은 경우, url 이런식으로 보내지면 안된다!!!


@MultipartConfig

RileTestController.java

@MultipartConfig(
//		location = "/tempRepo", 기본경로
		//아래 파일사이즈를 넘어서면 위의 location에 임시로 저장
//		fileSizeThreshold = 1024*1024, 기본값
		//파일 하나 당 최대 크기.. 50메가바이트
		maxFileSize = 1024*1024*50,
		//전체 request 크기.. 최대 50메가바이트를 5개까지
		maxRequestSize = 1024*1024*50*5
		)
        ...
        ...

		//사용자가 업로드한 파일 이름 알아오기(파일의 원래 이름)
		String originName = file.getSubmittedFileName();
		
		//사용자가 업로드한 파일에 input 스트림 연결
		InputStream fis = file.getInputStream();
		
		//저장할 경로
		//물리경로(c:../WebContent) + /upload
		String realPath = req.getServletContext().getRealPath("/upload");
		
		//파일 경로
		//File.separator : / 이런거
		String filePath = realPath + File.separator + originName;
		
		//파일 저장
		FileOutputStream fos = new FileOutputStream(filePath);
		
		byte[] buf = new byte[1024];
		int size = 0;
		while((size = fis.read()) != -1) {
			fos.write(buf, 0, size);
		}
		
		fis.close();
		fos.close();

index.jsp

	<!-- 파일을 제출할 때 인코딩타입으로 저렇게 해야함! -->
	<form action="fileTest" method="post" enctype="multipart/form-data">
    ...
    ...
    Part file = req.getPart("f");



전체 파일

  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>파일 테스트</h1>
	
	<!-- 파일을 제출할 때 인코딩타입으로 저렇게 해야함! -->
	<form action="fileTest" method="post" enctype="multipart/form-data">
		<input type="text" name="id"><br>
		<input type="file" name="f"><br>
		<input type="submit" value="파일제출">
	
	</form>
</body>
</html>


package com.kh.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

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

@MultipartConfig(
//		location = "/tempRepo", 기본경로
		//아래 파일사이즈를 넘어서면 위의 location에 임시로 저장
//		fileSizeThreshold = 1024*1024, 기본값
		//파일 하나 당 최대 크기.. 50메가바이트
		maxFileSize = 1024*1024*50,
		//전체 request 크기.. 최대 50메가바이트를 5개까지
		maxRequestSize = 1024*1024*50*5
		)
@WebServlet("/fileTest")
public class FileTestController extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String id = req.getParameter("id");
		Part file = req.getPart("f");
		
		//사용자가 업로드한 파일 이름 알아오기(파일의 원래 이름)
		String originName = file.getSubmittedFileName();
		
		//사용자가 업로드한 파일에 input 스트림 연결
		InputStream fis = file.getInputStream();
		
		//저장할 경로
		//물리경로(c:../WebContent) + /upload
		String realPath = req.getServletContext().getRealPath("/upload");
		
		//파일 경로
		//File.separator : / 이런거
		String filePath = realPath + File.separator + originName;
		
		//파일 저장
		FileOutputStream fos = new FileOutputStream(filePath);
		
		byte[] buf = new byte[1024];
		int size = 0;
		//사이즈가 -1이면 아웃
		while((size = fis.read(buf)) != -1) {
			fos.write(buf, 0, size);
		}
		
		fis.close();
		fos.close();
		
		System.out.println(id);
		System.out.println(file);
	}
}





복수 파일 제출




보여주기

  • FileTestController.java
		//화면에 보여주기
		req.setAttribute("path", "falling.png");
		req.getRequestDispatcher("/index.jsp").forward(req, resp);

  • index.jsp
	<img alt="not falling" src="upload/${path}">




다운로드하기

  • index.jsp
	<a href="upload/${path}" download>이미지 다운로드하기</a>

0개의 댓글