카테고리 없음

Spring 08 - 파일 업로드 P604까지

나주나주 2024. 3. 8. 10:30

<form> 태그를 이용하는 방식: 브라우저의 제한이 없어야 하는 경우

  • 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방식

Ajax를 이용하는 방식: 첨부파일을 별도로 처리하는 방식

  • <input type='file>을 이용하고 Ajax로 처리하는 방식
  • HTML5의 Drag And Drop 기능이나 jQuery 라이브러리를 이용해서 처리하는 방식

 

 

C:\\upload\\temp

web.xml

<!-- 파일 업로드 -->
	<multipart-config>
		<location>C:\\upload\\tmp</location>
		<max-file-size>20971520</max-file-size> <!-- 1024(kb) * 20 * 1024(mb) == 단일 파일 크기 20MB -->
		<max-request-size>41943040</max-request-size> <!-- 한 번에 올리는 파일 크기 -->
		<file-size-threshold>20971520</file-size-threshold> <!-- 메모리 사용 -->
	</multipart-config> <!-- servlet-context.xml 추가 항목 필수(빈으로 관리) -->
multipart-config Settings 설명
file-size-threshold 메모리 사용
location 업로드되는 파일을 저장할 공간
max-file-size 업로드되는 파일의 최대 크기
max-request-size 한 번에 올릴 수 있는 최대 크기

 

Tip) web.xml은 WAS(Tomcat) 설정으로, 업로드 처리는 MultipartResolver라는 타입의 객체를 빈으로 등록해야 한다. 

 

servlet-context.xml

<context: component-scan base-package="org.zerock.controller" />

//첨부파일을 처리하는 빈의 id는 multipartResolver
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"></beans:bean>

 

1. <form> 방식의 파일 업로드

MultipartFile의 메서드 설명
String getName() 파라미터의 이름 <input> 태그의 이름
String getOriginalFileName() 업로드되는 파일의 이름
boolean isEmpty() 파일이 존재하지 않는 경우 true
long getSize() 업로드되는 파일의 크기
byte[] getBytes() byte[]로 파일 데이터 반환
InputStream getInputStream() 파일데이터와 연결된 InputStream 반환
transferTo(File file) 파일의 저장

 

2.Ajax를 이용하는 파일 업로드

jQuery를 이용해서 처리하면 편리

FormData 타입의 객체에 각 파일 데이터를 추가하는 것과 이를 Ajax로 전송할 때 약간의 옵션이 붙어야 한다

 

uploadAjax.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional/EN" "http://www.w3.org/TR/html4.loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" ; charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Upload with Ajax</h1>

	<div class="uploadDiv">
		<input type="file" name="uploadFile" multiple>
	</div>

	<button id="uploadBtn">Upload</button>

	<script src="https://code.jquery.com/jquery-3.3.1.min.js"
		integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
		crossorigin="anonymous"></script>

	<script>
		$(document).ready(function() {
			$("#uploadBtn").on("click", function(e) {
				var formdata = new FormData();
				var inputFile = $("input[name='uploadFile']");
				var files = inputFile[0].files;

				console.log(files);
	
				//첨부파일 데이터를 formData에 추가
				for (var i = 0; i < files.length; i++) {
					formData.append("uploadFile", files[i]);
				}

				$.ajax({
					url : '/uploadAjaxAction',
					processData : false, //이렇게 지정해야 전송됨
					contentType : false, //이렇게 지정해야 전송됨
					data : formData, //ajax를 통해 전송
					type : 'POST',
					success : function(result) {
						alert("Uploaded");
					}
				}) //ajax
			});
		})
	</script>
</body>
</html>

 

P504 하다가 ajax내용이 계속되길래 JS하러감 ㅎㅎ^^;;;

UploadController.java

@PostMapping("/uploadAjaxAction")
	public void uploadAjaxPost(MultipartFile[] uploadFile) {
		//log.info();
	}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

첨부파일 삭제 P545

회사에서는 하드에 있는 건 안전하게 지우진 않고 list만 지움

첨부파일의 삭제 고민