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>
Leave a comment