fileUpload

fileUpload


Html์˜ form ํƒœ๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ application/x-www-form-urlencoded ๋ฐฉ์‹์˜ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉฐ
name=value์˜ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

ํ•˜์ง€๋งŒ ํŒŒ์ผ์€ ์—…๋กœ๋“œํ•˜๊ธฐ์—๋Š” ๋งž์ง€์•Š๋Š” ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„ 
formํƒœ๊ทธ์— enctype=โ€multipart/form-dataโ€ ์˜ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

MultiPart

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ํŽธํ•˜๊ฒŒ ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•„์š”ํ•œ lib

  • com.springsource.org.apache.commons.fileupload.jar
  • com.springsource.org.apache.commons.io.jar

๋จผ์ € ์Šคํ”„๋ง common-servlet.xml์˜ MultipartResolver๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

CommonsMultipartResolver ์„ ๋นˆ ํด๋ž˜์Šค๋กœ ๋“ฑ๋กํ•œ๋‹ค.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:mvc="http://www.springframework.org/schema/mvc"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation=
				"http://www.springframework.org/schema/beans 
				http://www.springframework.org/schema/beans/spring-beans.xsd
				
				http://www.springframework.org/schema/context 
				http://www.springframework.org/schema/context/spring-context.xsd"
				>

    <!-- ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

</beans>

VO

๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ MultipartFile ํƒ€์ž…์˜ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

public class Product {
	
	private String fileName;
	private String manuDate;
	private int price;
	private String prodDetail;
	private String prodName;
	private int prodNo;
	private Date regDate;
	private String proTranCode;
	
	private MultipartFile file;

@Controller

@ModelAttribute๋กœ form ํƒœ๊ทธ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋„๋ฉ”์ธ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉํ•œ๋‹ค. file ํƒ€์ž…์œผ๋กœ ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” MutipartFile file์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

  • @ModelAttribute๋ฅผ ์‚ฌ์šฉ ํ•˜์ง€์•Š๊ณ  MutiPartFile file์„ ์„ ์–ธํ•˜์—ฌ ํŒŒ์ผ์„ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
@RequestMapping(value = "addProduct", method = RequestMethod.POST)
	public String addProduct(@ModelAttribute("product") Product product) throws Exception {

		System.out.println("/product/addProduct :: POST");
		// Business Logic
		//////////
		MultipartFile file = product.getFile();
		if(file != null) {
			String fileName = file.getOriginalFilename();
			product.setFileName(fileName);
			try {
				File file2 = new File("/images/uploadFiles/"+fileName);
				file.transferTo(file2);
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
		//////////
		productService.addProduct(product);

		return "forward:/product/addProduct.jsp";
	}

๋‹ค์ค‘ํŒŒ์ผ ์—…๋กœ๋“œ


input ํƒœ๊ทธ์— multiple=โ€multipleโ€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒ์ผ์„ ์„ ํƒํ›„ MultipartFile์„ ์–ด๋ ˆ์ด๋กœ ์„ค์ •ํ•˜์—ฌ ๋‹ค์ค‘ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

<td class="ct_write01">
			<input	type="file" name="file" class="ct_input_g" 
					style="width: 200px; height: 19px" maxLength="13" multiple="multiple"/>
</td>

ํ–ฅ์ƒ๋œ for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ file์„ ํ•˜๋‚˜์”ฉ ๋ถˆ๋Ÿฌ์™€ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  CSV๋ฅผ ํ†ตํ•ด ํŒŒ์‹ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ์„ ํ•œ๋‹ค.

@RequestMapping(value = "addProduct", method = RequestMethod.POST)
	public String addProduct(@ModelAttribute("product") Product product) throws Exception {

		System.out.println("/product/addProduct :: POST");
		// Business Logic
		//////////
		String fileName = "";
		MultipartFile[] files = product.getFile();
		for(MultipartFile file : files) {
				
			if(file != null || !file.isEmpty()) {
				fileName += file.getOriginalFilename()+"/";
				try {
					File file2 = new File("/images/uploadFiles/"+fileName);
					file.transferTo(file2);
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		//////////
		
		product.setFileName(fileName);
		productService.addProduct(product);

		return "forward:/product/addProduct.jsp";
	}

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ file์„ JSTL split์„ ํ†ตํ•ด์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€ํŒŒ์ผ๋กœ ์ถœ๋ ฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • <%@ taglib prefix=โ€fnโ€ uri=โ€http://java.sun.com/jsp/jstl/functionsโ€ %>
  • ${fn:split(String, โ€˜csvโ€™)}
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<tr>
		<td width="104" class="ct_write">
			์ƒํ’ˆ์ด๋ฏธ์ง€ <img 	src="/images/ct_icon_red.gif" width="3" height="3" align="absmiddle"/>
		</td>
		<td bgcolor="D6D6D6" width="1"></td>
		<td class="ct_write01">
			<c:set var="file" value="${product.fileName }"/>
			<c:forEach var="fileName" items="${fn:split(file, '/')}">  
				<img src="/images/uploadFiles/${fileName}" width="400" height="400"/>
			</c:forEach>
		</td>
	</tr>

Categories:

Updated:

Leave a comment