오늘은 다른 컴퓨터의 sql서버와 연결해서 사이트 띄우는 것을 테스트하고 남은 시간엔 file-upload 기능 구현을 시도했다. form에 encrypt=multipart/form-data
속성을 추가하니 controller의 addBtFile.do
로 넘어가지 못한다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://연결할 컴퓨터의ip:sql포트/database이름" />
<property name="username" value="계정이름"/>
<property name="password" value="계정비밀번호"/>
</bean>
출장 정보 테이블에는 첨부파일 경로 속성이 있다. 남은 시간 동안 파일 업로드를 시도해보기로 했다.
참고블로그1
참고블로그2
전자정부위키-fileUpload
전자정부 위키에서는 apache에서 제공하는 commonsMultipartResolver를 사용할 것을 권장하고 있다. 이를 위해서 apache common-fileupload
, apache-common-io
을 pom.xml에 추가해주어야 한다. 나는 아래 링크를 참고해 최신 버전으로 추가해주었다.
fileupload 다운로드
common-io 다운로드
<!-- 파일 업로드 -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
전자정부 위키 예시에선 기본 예시와 custom resolver 코드를 함께 주는데, 나는 기본 resolver 코드만 가져왔다.
<!-- MULTIPART RESOLVERS -->
<!-- regular spring resolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000" />
<property name="maxInMemorySize" value="100000000" />
</bean>
public class BtFileVO extends SampleDefaultVO {
private static final long serialVersionUID = 1L;
// 파일 객체
private MultipartFile mpfile;
// 파일 번호
private int fileId;
// 출장 정보 번호
private String btId;
// 파일 원래 이름
private String originFileName;
// 서버에 저장되는 파일 이름
private String fileName;
// 업로드 시각
private Timestamp uploadedAt;
}
form 태그에서 파일 전송을 하기 위해서는 encrypt: multipart/form-data
속성을 추가해주어야 한다. 기본 예제를 복사해서 만들었더니 <form:form>
형식을 사용하고 있긴 하지만, 속성값 추가하는 방법이 크게 다르진 않은 것 같다.
원래는 기존의 addBt에서 fileupload 메소드를 호출해서 쓰려고 했다. 그런데 내 생각처럼은 잘 안된다. 대부분의 예제는 파일 업로드만을 구현해놓은 느낌이라 이미 2개 테이블을 순차적으로 접근해야 하는 내 프로젝트에 어떻게 적용해야 할지 모르겠다.
파일 업로드를 위해 반드시 다른 url로 보내는 과정이 필요한가?
현재 register.jsp 파일에서 Controller의 파일업로드 주소로 이동하려고 하면 에러가 나는 상황이다.
프로젝트를 다시보니 파일을 여러 개 업로드할 때 쓰는 multiCommonsMultipartResolver
와 보통 사용하는 commonsMultipartResolver
가 분리되어 있는데 내가 혼용해서 쓴 것 같기도 하다.