Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Spring] 파일 업로드와 파일 다운로드 설정 및 기능구현 본문

파일 업로드 컴포넌트
(구현체: CommonsMultipartResolver)
⚠️. 파일을 업로드할 때, method는 반드시 post여야한다.
(get은 길이제한이 있기 때문에)
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
[UploadController.java]
@Controller
public class UploadController {
@RequestMapping("/upload.do")
public String upload(UploadDTO dto, HttpSession session, Model model) {
try {
// 저장할 폴더의 위치 가져오기
String saveDir = session.getServletContext().getRealPath("/WEB-INF/save");
MultipartFile file = dto.getFile();
String fileName = file.getOriginalFilename();
file.transferTo(new File(saveDir + "/" + fileName));
dto.setFileName(fileName);
dto.setFileSize(file.getSize()); // 첨부된 파일용량
model.addAttribute("saveDir", saveDir);
} catch (IOException e) {
e.printStackTrace();
}
return "uploadResult";
}
}
📌. 세션에서 실제 경로 가져오기
: session.getServletContext().getRealPath("/WEB-INF/save");
: session.getServletContext().getRealPath("/WEB-INF/save");
📌. file.transferTo
: 업로드된 파일을 서버의 원하는 폴더에 저장
: 업로드된 파일을 서버의 원하는 폴더에 저장
[UploadDTO.java]
@Setter
@Getter
@Component
public class UploadDTO {
private String name;
private MultipartFile file;
private String fileName;
private long fileSize;
}
파일 다운로드
다운로드 기능을 담당하는 클래스
BeanNameViewResolver
Controller가 리턴하는 ViewName과 동일한 이름을 갖는 Bean을 뷰 객체로 사용한다.
<bean id="customView" class="soa.spring3.down.DownLoadCustomView" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1" />
</bean>
[DownLoadCustomView.java]
@Component("downLoadView") // bean생성 <bean id="customView" class="~.DownLoadView" /> 대신
public class DownLoadCustomView extends AbstractView {
@Override
protected void renderMergedOutputModel(Map<String, Object> map,
HttpServletRequest request, HttpServletResponse response) throws Exception {
File file = (File)map.get("fname"); // 다운로드할 파일객체
response.setContentType("application/download;charset-UTF-8");
response.setContentLength((int)file.length());
String userAgent = request.getHeader("User-Agent");
boolean isInternetExplorer = userAgent.indexOf("MSIE") > -1;
String fileName = null;
if(isInternetExplorer)
fileName = URLEncoder.encode(file.getName(), "UTF-8");
else
fileName = new String(file.getName().getBytes("UTF-8"), "iso-8859-1");
response.setHeader("Content-Disposition","attachment;filename=\"" + fileName.replace("+", "%20") + "\";");
OutputStream out = response.getOutputStream();
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
FileCopyUtils.copy(fis, out)
} catch(Exception e) {
e.printStackTrace();
} finally {
if(fis != null) {
try {
fis.close();
} catch(IOException ex) { }
}
}
out.flush();
}
}