Web
스프링 파일 다운로드/업로드 방법
남자두부 2016. 7. 18. 13:37반응형
* 서블릿에서 아래와 같이 빈 파일을 추가해준다.
1
2
3
4
5
6
7
8
9
10
11
12 |
<!-- 업로드 -->
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="10000000" />
<beans:property name="maxInMemorySize" value="10000000" />
</beans:bean>
<!-- 다운로드 -->
<beans:bean id="fileViewResolver"
class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="0" />
</beans:bean> |
cs |
1
업로드
1
2
3
4
5
6
7
8
9
10
// step1. 파일 설정
MultipartFile multipartFile = request.getFile("File");
// step2. 주소 설정
String fileName = multipartFile.getOriginalFilename();
String filePath = "D:/Upload/" + fileName;
// step3. 업로드
File file = new File(filePath);
multipartFile.transferTo(file);cs
2
다운로드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 |
// step1. 필요한 타입 선언
byte b[] = new byte[1024];
FileInputStream fis = new FileInputStream(fpath);
ServletOutputStream sos = null;
// step2. 파일 설정
String fpath = request.getParameter("fpath"); // 주소
String fname = request.getParameter("fname"); // 이름
String ftype = request.getParameter("ftype"); // 타입
int fsize = Integer.valueOf(request.getParameter("fsize")); // 크기
// step3. 다운로드 설정
request.getHeader("User-Agent");
response.setContentType(ftype);
response.setContentLength(fsize);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fname + "\";");
response.setHeader("Content-Transfer-Encoding", "binary");
sos = response.getOutputStream();
// step4. 파일 쓰기
int read = 0;
while((read = fis.read(b)) != -1){
sos.write(b, 0, read);
}
// step5. 서블릿으로 보내기
FileCopyUtils.copy(fis, sos);
// step6. 종료
sos.flush();
sos.close();
fis.close(); |
cs |
*
업로드와 다운로드에서 변수 값은 jsp 에서 form을 통해 넘겨온 값이다.
업로드에서 주소를 로컬주소를 사용했는데 실제론 서버주소를 사용해야 한다.
업로드에서 파일명을 그대로 사용하였다. 하지만 실제론 파일명이 중복되지 않게 사용하여야 한다.
보통 앞에 날짜를 초단위까지 만들어 붙인다.
허나 이 방법 역시 대형사이트에선 중복이 발생할 가능성이 있다.
그렇기에 작성자의 아이디나 랜덤으로 만든 값 등을 사용해 특별한 고유값을 만들어 주어야 한다.
다운로드에서 getOutputStream()을 사용하면 로그에 오류가 찍힌다.
이 문제를 해결하기 위해 out.clear();을 jsp에서 사용하면 된다고 한다. 하지만 난 해결되지 않았다.
반응형