오늘 한 일

오늘은 다른 컴퓨터의 sql서버와 연결해서 사이트 띄우는 것을 테스트하고 남은 시간엔 file-upload 기능 구현을 시도했다. form에 encrypt=multipart/form-data 속성을 추가하니 controller의 addBtFile.do로 넘어가지 못한다.

다른 컴퓨터의 sql서버에 연결하기

  1. 연결할 컴퓨터의 ip주소 알아오기
  2. mysql workbench에서 새로운 mysql connection 만들어서 host에 다른 컴퓨터 ip 적고 로그인한다.
  3. context-datasource.xml 파일에 db정보 업데이트
<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. 새로운 mysql database에 쿼리에 필요한 테이블 생성한 후 실행

파일 업로드

출장 정보 테이블에는 첨부파일 경로 속성이 있다. 남은 시간 동안 파일 업로드를 시도해보기로 했다.
참고블로그1
참고블로그2
전자정부위키-fileUpload

1. pom.xml에 dependency 추가

전자정부 위키에서는 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>

2. context-common.xml에 bean 추가

전자정부 위키 예시에선 기본 예시와 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>

3. 파일정보 저장할 DB 테이블 및 VO 만들기

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;
}

4. jsp파일 form 태그 multipart/form-data로 변경

form 태그에서 파일 전송을 하기 위해서는 encrypt: multipart/form-data 속성을 추가해주어야 한다. 기본 예제를 복사해서 만들었더니 <form:form> 형식을 사용하고 있긴 하지만, 속성값 추가하는 방법이 크게 다르진 않은 것 같다.

4. controller에 fileupload 메소드 구현

원래는 기존의 addBt에서 fileupload 메소드를 호출해서 쓰려고 했다. 그런데 내 생각처럼은 잘 안된다. 대부분의 예제는 파일 업로드만을 구현해놓은 느낌이라 이미 2개 테이블을 순차적으로 접근해야 하는 내 프로젝트에 어떻게 적용해야 할지 모르겠다.
파일 업로드를 위해 반드시 다른 url로 보내는 과정이 필요한가?
현재 register.jsp 파일에서 Controller의 파일업로드 주소로 이동하려고 하면 에러가 나는 상황이다.
프로젝트를 다시보니 파일을 여러 개 업로드할 때 쓰는 multiCommonsMultipartResolver와 보통 사용하는 commonsMultipartResolver가 분리되어 있는데 내가 혼용해서 쓴 것 같기도 하다.

profile
문서화를 좋아하는 개발자

0개의 댓글