본문 바로가기
멀티캠퍼스 풀스택 과정/백엔드

Spring:15 자료실(다운로드, 업로드) DB설계, 환경변수설정 -1

by 이쟝 2022. 3. 22.

자료를 업로드하고 다운로드할 수 있는 자료실을 구현한다.

첨부파일은 2개까지 제한하고, 기본적으로 1개의 파일은 꼭 업로드해야 한다.

 

1. DB설계

레코드 번호(no), 아이디(userid), 제목(subject), 내용(content), 파일 1,2(1은 꼭 업로드해야 함), 등록일(createdate 자동생성)

외래키참조! dataLibrary userid를 member userid와 연결시키기


2. 프레임워크 추가

파일을 업로드할 수 있는 라이브러리를 pom.xml에 추가한다. 

1. commons-fileupload

2. commons-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>​


3. 객체 생성을 위해서 root-context.xml 세팅, servlet.context.xml 세팅

root-context.xml 

	<!-- 파일 업로드 처리를 하기 위한 MultipartResolver 객체를 생성해주면 
	     dispatcherServlet이 참조해서 파일 업로드를 수행한다. -->
	     <!-- 변수 반드시 똑같이!! -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="-1"></property>
		<property name="defaultEncoding" value="UTF-8"></property>
	</bean>
Multipart 지원 기능을 이용하려면 먼저 MultipartResolver를 스프링 설정 파일에 등록해 주어야 한다. 
- MultipartResolver는 Multipart 형식으로 데이터가 전송된 경우, 해당 데이터를 스프링 MVC에서 사용할 수 있도록
변환해준다. 즉, Muiltpart객체를 컨트롤러에 전달하는 역할이다.

- 스프링이 기본으로 제공하는 MultipartResolver CommmnosMultipartResolver이다. CommmnsMultipartResolverCommons FileUpload API를 이용해서 Multipart를 처리해준다.
- CommmonsMultipartResolverMultipartResolver로 사용하려면 다음과 같이 빈 이름으로 "multipartResolver"를 등록하면 된다.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

 

- CommonsMultipartResolver 클래스의 프로퍼티

maxUploadSize  long 최대 업로드 가능한 바이트 크기, -1은 제한이 없음을 의미 기본 값은 -1
defaultEncoding String 요청을 파싱 할 때 사용할 캐릭터 인코딩 지정하지 않은 경우
HttpServletReqeust.setEncoding( ) 메서드로 지정한 캐릭터 셋이 사용된다.
아무 값도 없으면 ISO-8859-1을 사용한다.
maxInMemorySize int 디스크에 임시 파일을 생성하기 전에 메모리에 보관할 수 있는 최대 바이트 크기

4. view 폴더 생성, webabb안에 upload 폴더 생성하고 Servlet-context.xml 설정

  1. src > main > webapp > WEB-INF > views > data 
  2. src > main > webapp > upload 
  3. Servlet-context에게 upload라는 폴더를 생성했다고 알려줘야 함 -> Servlet-context.xml에 다음 내용 추가
<resources mapping="/upload/**" location="/upload/"/>

5. VO, DAO, Service, ServiceImpl, Controller, Mapper생성

package com.mycampus.myappy.vo;

public class DataLibVO {
	
	private int no;
	private String userid;
	private String subject;
	private String content;
	private String filename1;
	private String filename2;
	private String createdate;
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getFilename1() {
		return filename1;
	}
	public void setFilename1(String filename1) {
		this.filename1 = filename1;
	}
	public String getFilename2() {
		return filename2;
	}
	public void setFilename2(String filename2) {
		this.filename2 = filename2;
	}
	public String getCreatedate() {
		return createdate;
	}
	public void setCreatedate(String createdate) {
		this.createdate = createdate;
	}
	
}
package com.mycampus.myappy.dao;

public interface DataLibDAO {

}
package com.mycampus.myappy.service;

public interface DataLibService {

}
package com.mycampus.myappy.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mycampus.myappy.dao.DataLibDAO;

@Service
public class DataLibServiceImpl implements DataLibService {

	@Autowired
	DataLibDAO dao;
	
}
package com.mycampus.myappy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import com.mycampus.myappy.service.DataLibService;

@RestController
public class DataLibController {
	
	@Autowired
	DataLibService service;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mycampus.myappy.dao.DataLibDAO">
</mapper>