[파일 업로드하기]
1. 파일 업로드를 하기 위해 라이브러리 다운 받아야함.
받아야할 것 : commons-fileupload , commons-io
현재 maven을 사용하고 있기 때문에
Maven Repository에 들어가서 위의 두 파일을 porm.xml에 추가한다.
2. 사용해야할 객체 등록
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
- 주의 : id명을 multipartResolver가 아닌 다른이름으로 할 경우 못찾음.
- 파일 업로드 가능 용량은 무제한이다 (-1로 설정되어있음) 용량을 변경하기 위해서는 setter인젝션 방법으로 설정할 수 있다. ( 위 property name="maxUploadSize" value는 byte체계로 1024 * 1024* 10 = 10mb로 설정.

3. MultipartFile 인터페이스
: 업로드한 파일 정보 및 파일 데이터를 표현하기 위한 용도로 사용.
주요 메소드
- String / getName() : 파라미터 이름을 구한다.
- String / getOriginalFilename() : 업로드한 파일의 이름을 구한다.
- boolean/ idEmpty() : 업로드 한 파일이 존재하지 않는 경우 true를 리턴한다.
- long/ getSize() : 업로드한 파일의 크기를 구한다.
- byte[]/ getBytes() throws IOException : 업로드한 파일의 데이터를 구한다.
- InputStream/ getInputStream() throws IOException : 업로드 한 파일 데이터를 읽어오는 InputStream을 구한다.사용끝나면 종료해 주어야함.
-void/ transferTo(File dest)throws IOException : 업로드 한 파일 데이터를 지정한 파일에 저장한다.





[파일 다운로드 받기 ]
1. 파일 다운로드를 직접 구현하는것이 아닌 구현되어있는 기능 사용.
(카페)
com.yong.view 패키지에 DownloadView 클래스 생성.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;
public class DownloadView extends AbstractView {
public DownloadView() {
setContentType("application/download; charset=utf-8");
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
File file = (File) model.get("downloadFile");
response.setContentType(getContentType());
response.setContentLength((int) file.length());
String userAgent = request.getHeader("User-Agent");
boolean ie = userAgent.indexOf("MSIE") > -1;
String fileName = null;
if (ie) {
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 + "\";");
response.setHeader("Content-Transfer-Encoding", "binary");
OutputStream out = response.getOutputStream();
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
FileCopyUtils.copy(fis, out);
} finally {
if (fis != null)
try {
fis.close();
} catch (IOException ex) {
}
}
out.flush();
}
}

2. 컨트롤러/ jsp


3. 실 다운로드

mav.addObject에는 DownloadView.java 아래 부분과 이름을 맞춰줘야하며

setViewName에는 dispatcher-servlet에 등록한 id 로 연결해줘야한다.
4. dispatcher-servlet.xml에 등록한 것을 다시 보면

viewReslover의 우선순위가 높아 검색이 되지 않는다.

ㄴ 이렇게 우선순위를 변경해줘야 진입이 가능하다.
'개발자 > 백엔드 웹 개발자 과정(국비)' 카테고리의 다른 글
| [spring]알아두면 좋을것들 (0) | 2023.03.08 |
|---|---|
| [Mybatis] 사원 관리프로그램 다시 만들기 (0) | 2023.03.06 |
| [Spring] 검색기능, @RequestMapping 메서드 리턴 타입 (0) | 2023.03.02 |
| [Spring] DTO안 DTO , 진입메서드 (0) | 2023.02.27 |
| [Spring] post 인코딩방식 설정, DBCP추가 (0) | 2023.02.23 |