파일업로드 형식, 관련 메소드
Back-End/Spring 2019. 6. 17. 18:07파일업로드
스프링 프레임워크의 내장객체
SPRING / 파일업로드 적용방법
- pom.xml 설정 -
maven build를 위해서 pom.xml 파일에 commons-fileupload.jar 과 commons-io.jar 파일을 추가
<!-- MultipartHttpServletRequset -->
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
- spring-context.xml 설정 (spring bean 설정) -
1. CommonsMultipartResolver 는 스프링 프레임 워크에 내장되어 있음
2. property -> maxUploadSize : 파일 업로드 시 최대로 올릴 수 있는 파일 사이즈 (파일의 용량)
3. property -> maxlnMemorySize : 적용된 경로에 최대로 저장할 수 있는 파일 사이즈
<!-- MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000"/> <!-- 10MB-->
<property name="maxInMemorySize" value="100000000"/> <!-- 10MB-->
</bean>
-jsp 설정 (화면)-
1. form 태그의 enctype을 multipart / form-data로 설정해줘야 파일업로드 기능이 적용된다.
2. input 값에 대한 타입은 file로 적용해야 한다.
<!-- form enctype="multipart/form-data"를 적어줘야 한다. -->
<form method="post" action="<c:url value='/regFile'/>" enctype="multipart/form-data">
<!-- input type="file" 이라고 꼭 적어줘야 함 -->
<input type="file" class="form-control" id="uploadFile"
name="uploadFile" />
<button type="submit" class="btn btn-default">저장</button>
<button type="list" class="btn btn-default">목록</button>
</form>
java 설정 (서버) - 준비
* 업로드한 파일의 경로가 도메인 별로 달라지기 때문에 파일 저장 경로를 다르게 지정해야 한다.
public class UtilFile {
String fileName = "";
// fileUpload() 메소드에서 전체 경로를 DB에 경로 그대로 저장 한다.
public String fileUpload(MultipartHttpServletRequest request,
MultipartFile uploadFile,Object obj) {
String path = "";
String fileName = "";
OutputStream out = null;
PrintWriter printWriter = null;
try {
fileName = uploadFile.getOriginalFilename();
byte[] bytes = uploadFile.getBytes();
path = getServletContext().getRealPath("/") + files/;
File file = new File(path);
// 파일명을 중복체크
if (fileName != null && !fileName.equals("")) {
if (file.exists()) {
// 파일명 앞에 구분(예)업로드 시간 초 단위)을 주어 파일명 중복을 방지한다.
fileName = System.currentTimeMillis() + "_" + fileName;
file = new File(path + fileName);
}
}
out = new FileOutputStream(file);
out.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return path + fileName;
}
java 설정 (서버) - 적용
@Controller
public class RewardController {
// 파일을 업로드하는 컨트롤러 클래스 메소드
@RequestMapping(value = "re/add", method = RequestMethod.POST)
// 인자로 MulfiPartFile 객체,
MultipartHttpServletRequest 객체, 업로드 하려는 도메인 클래스를 받는다
public String reAddProCtrl(@RequestParam("uploadFile") MultipartFile uploadFile, MultipartHttpServletRequest request, Reward reward) {
//UtilFile 객체 생성
UtilFile utilFile = new UtilFile();
//파일 업로드 결과값을 path로 받아온다
String uploadPath=utilFile.fileUpload(request,uploadFile,
reward);
// 해당 경로만 받아 db에 저장한다.
int n = rewardService.reAddServ(uploadPath, reward);
return "isg/Boardlist";
}
}
출처
-File 파일 업로드 관련 클래스-
File 클래스 정리
java.io 패키지는 기존의 파일이나 폴더에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다.
이 클래스를 이용해서 파일과 폴더에 대한 다양한 기능을 제공한다.
파일을 나타내는 객체를 생성하려면 다음과 같은 File 클래스의 생성자 함수를 이용한다.
* File 클래스의 생성자
File 클래스의 생성자 | 설명 |
File(File parent, String Child) | parent 객체 폴더의 child 라는 파일에 대한 File 객체를 생성한다. |
File(String pathname) | pathname에 해당되는 파일의 File 객체를 생성한다. |
File(String parent, String, child) | parent 폴더 경로의 child라는 파일에 대한 File 객체를 생성한다. |
File(URI uri) | file uri 경로에 대한 파일의 File 객체를 생성한다. |
* File 클래스의 메소드
File 클래스의 메소드 | 설명 |
File getAbsoluteFile() | 파일의 절대 경로를 넘겨준다. |
String getAbsolutePath() | 파일의 절대 경로를 문자열로 넘겨준다. |
File getCanonicalFile() | 파일의 Canonical 경로를 넘겨준다. |
String getCanonicalPath() | 파일의 Canonical 경로를 문자열로 넘겨준다. |
String getName() | 파일이나 폴더의 이름을 넘겨준다. |
String getParent() | 부모 경로에 대한 경로명을 문자열로 넘겨준다. |
File getParentFile() | 부모 폴더를 File의 형태로 리턴한다. |
String getPath() | 파일의 경로를 문자열의 형태로 리턴한다. |
long getTotalSpace() | 하드디스크의 총 용량을 리턴한다. |
long getUsableSpace() | 하드디스크의 사용 가능한 용량을 리턴한다. |
long getFreeSpace() | 하드디스크의 남은 공간을 리턴한다. |
int hashCode() | hash code를 반환한다. |
long lastModified() | 해당 경로 파일의 최종 수정 일자를 반환한다. |
long length() | 해당 경로 파일의 길이를 반환한다. |
Path toPath() | java.nio.file.Path 객체로 반환한다. |
URI toURI() | URI 형태로 파일 경로를 반환한다. |
File[] listRoots() | 하드디스크의 루트 경로를 반환한다. |
String[] list() | 경로의 파일들과 폴더를 문자열 배열로 반환한다. |
String[] list(FilenameFilter filter) | filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환한다. |
File[] listFiles() | 해당 경로의 파일들과 폴더의 파일을 배열로 반환한다. |
File[] listFiles(FileFilter filter) | filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. |
File[] listFiles(FilenameFilter filter) | filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. |
* File 생성/수정/삭제 메소드
File 생성 수정 삭제 메소드 | 설명 |
boolean createNewFile() | 주어진 이름의 파일이 없으면 새로 생성한다. |
static File createTempFile(String prefix, String suffix) | default temporary-file 디렉토리에 파일 이름에 prefix와 suffix를 붙여 임시파일을 생성한다. |
static File createTempFile(String prefix, String suffix, File directory) | 새로운 임시파일을 파일 이름에 prefix와 suffix를 붙여 directory 폴더에 생성한다. |
boolean delete() | 파일이나 폴더를 삭제한다. 단, 폴더가 비어있지 않으면 삭제할 수 없다. |
void deleteOnExit() | 자바가상머신이 끝날 때 파일을 삭제한다. |
boolean mkdir() | 해당 경로에 폴더를 만든다. |
boolean mkdirs() | 존재하지 않는 부모 폴더까지 포함하여 해당 경로에 폴더를 만든다. |
boolean renameTo(File dest) | dest 로 File 이름을 변경한다. |
* File 체크 메소드
File 체크 메소드 | 설명 |
boolean exists() | 파일의 존재 여부를 리턴한다. |
boolean isAbsolute() | 해당 경로가 절대경로인지 여부를 리턴한다. |
boolean isDirectory() | 해당 경로가 폴더인지 여부를 리턴한다. |
boolean isFile() | 해당 경로가 일반 file 인지 여부를 리턴한다. |
boolean isHidden() | 해당 경로가 숨김 file 인지 여부를 리턴한다. |
* File 권한 메소드
File 클래스 권한 관련 메소드 | 설명 |
boolean canExecute() | 파일을 실행할 수 있는지 여부를 리턴한다. |
boolean canRead() | 파일을 읽을 수 있는지 여부를 리턴한다. |
boolean canWrite() | 파일을 쓸 수 있는지 여부를 리턴한다. |
boolean setExecutable(boolean executable) | 파일 소유자의 실행 권한을 설정한다. |
boolean setExecutable(boolean executable, boolean ownerOnly) | 파일의 실행 권한을 소유자 또는 모두에 대해 설정한다. |
boolean setReadable(boolean readable) | 파일의 소유자의 읽기 권한을 설정한다. |
boolean setReadable(boolean readable, boolean ownerOnly) | 파일의 읽기 권한을 소유자 또는 모두에 대해 설정한다. |
boolean setReadOnly() | 파일을 읽기 전용으로 변경한다. |
boolean setWritable(boolean writable) | 파일의 소유자의 쓰기 권한을 설정한다. |
boolean setWritable(boolean writable boolean ownerOnly) | 파일의 쓰기 권한을 소유자 또는 모두에 대해 설정한다 |
출처: https://hyeonstorage.tistory.com/233 [개발이 하고 싶어요]
'Back-End > Spring' 카테고리의 다른 글
스프링을 사용해서 pdf 생성 (2) | 2019.06.19 |
---|---|
상품관리 (관리자용 상품등록/수정/삭제) (1) | 2019.06.18 |
상품관리 (관리자 로그인/로그아웃) (0) | 2019.06.17 |
상품관리 (장바구니 기능구현 - 삭제, 비우기, 수정) (3) | 2019.06.14 |
상품관리 (로그인 / 로그아웃) (0) | 2019.06.12 |