티스토리 뷰
반응형
웹에서 멀티(다중)파일을 업로드할 때 아래와 같이 form tag 안에 input tag를 작성해 준다.
이 때 form에 enctype="multipart/form-data" 처리를 꼭 해주어야 함
<form id="fileForm" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple="true">
</form>
그리고, jquery ajax post 방식으로 java spring controller에 전달해 주는데
enctype: 'multipart/form-data'
processData: false
contentType: false
data: formData
위 코드들은 필수로 적어 주셔야만 합니다.
var formData = new FormData($('#fileForm')[0]);
$.ajax({
type: "POST",
enctype: 'multipart/form-data', // 필수
url: '/multipartUpload.do',
data: formData, // 필수
processData: false, // 필수
contentType: false, // 필수
cache: false,
success: function (result) {
},
error: function (e) {
}
});
아래는 controller에서 MultipartHttpSeervletRequest를 전달받아 List<MultipartFile>로 담아서 아래와 같이 처리 합니다.
@RequestMapping(value = "/multipartUpload.do", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> multipartUpload(MultipartHttpServletRequest request) throws Exception {
List<MultipartFile> fileList = request.getFiles("file");
String path = application.getRealPath("[경로]");
File fileDir = new File(path);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
long time = System.currentTimeMillis();
for (MultipartFile mf : fileList) {
String originFileName = mf.getOriginalFilename(); // 원본 파일 명
String saveFileName = String.format("%d_%s", time, originFileName);
try {
// 파일생성
mf.transferTo(new File(path, saveFileName));
} catch (Exception e) {
e.printStackTrace();
}
}
}
아래 코드 중
if(request.getFiles("file").get(0).getSize() != 0){
fileList = request.getFiles("file");
}
이 부분은 웹에서 첨부파일을 하지 않고 넘겼을 경우, fileList가 위와 같이
List<MultipartFile> fileList = request.getFiles("file"); 일 때에는 .size()가 무조건 1이라
아래 for 문에서 무조건 하나가 처리되어 파일명이 null로 저장되는 경우
아래와 같이 추가 하면 됩니다.
@RequestMapping(value = "/multipartUpload.do", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> multipartUpload(MultipartHttpServletRequest request) throws Exception {
List<MultipartFile> fileList = new ArrayList<MultipartFile>();
// input file 에 아무것도 없을 경우 (파일을 업로드 하지 않았을 때 처리)
if(request.getFiles("file").get(0).getSize() != 0){
fileList = request.getFiles("file");
}
String path = application.getRealPath("[경로]");
File fileDir = new File(path);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
long time = System.currentTimeMillis();
for (MultipartFile mf : fileList) {
String originFileName = mf.getOriginalFilename(); // 원본 파일 명
String saveFileName = String.format("%d_%s", time, originFileName);
try {
// 파일생성
mf.transferTo(new File(path, saveFileName));
} catch (Exception e) {
e.printStackTrace();
}
}
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- linux ll 명령어
- MultipartFile 업로드 처리
- 웹 ajax 멀티파일 업로드
- 리눅스 sftp 명령어
- favicon.ico html header link tag
- schema object was not found
- /favicon.ico:1 오류
- ls -al alias
- 티베로 설치
- TBR-8033
- 티베로6 설치
- favicon.ico:1
- sftp 접속
- 티베로 라이센스
- favicon.ico error
- tibero 라이센스
- docker-compose not found
- 윈도우 시작프로그램 폴더
- tibero6 설치
- tibero 설치
- List<MultipartFile> 업로드
- favicon.ico 에러 없애는 방법
- docker-compose command not found
- ls -al 단축 명령어
- tibero 데모 라이센스
- ll 명령어
- linux sftp 명령어
- java multi file upload
- docker-compose: line 1: Not: command not found
- #오픈소스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함