티스토리 뷰
안녕하세요, 간만에 기술 글을 올리게 되네요.
다사다난했던 관계로 짬도 안났고, 게으르기도 했구요.
다시 한번 예전으로 돌아가 글을 열심히 써봐야겠어요^^
오늘은 Spring boot에서 파일 업로드하는 것에 대해서 알아보겠어요.
프로젝트 생성시 Dependency는 Web, Devtools, Lombok 3개만 추가를 합니다.
추가적으로 파일 처리를 위해 Apache commons-io를 추가하겠습니다.
build.gradle
plugins {
id 'org.springframework.boot' version '2.1.5.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.cusonar'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// https://mvnrepository.com/artifact/commons-io/commons-io
implementation 'commons-io:commons-io:2.6'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
FileController.java
package com.cusonar.hello.controller;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import lombok.extern.slf4j.Slf4j;
@RestController
@RequestMapping("/files")
@Slf4j
public class FileController {
@Value("${temp.path}") private String tempPath;
@PostMapping("")
public String upload(@RequestParam String msg, @RequestParam MultipartFile[] files) throws IOException {
log.info("Upload start : {}", msg);
for (MultipartFile file : files) {
File tmp = new File(tempPath + UUID.randomUUID().toString());
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), tmp);
} catch (IOException e) {
log.error("Error while copying.", e);
throw e;
}
}
return "success";
}
}
application.yml 에 temp.path 를 설정해줍시다.
그리고 가동.
테스트는
cURL
curl -v -H "Content-Type: multipart/form-data" -X POST -F "files=@test.pdf,test.txt" http://localhost:8080/files
Javascript with jQuery ajax
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
function submit() {
var formData = new FormData();
formData.append('msg', $('#msg').val());
var files = $('#files')[0].files;
for (var i = 0; i < files.length; ++i) {
console.log(files[i]);
formData.append('files', files[i]);
}
$.ajax({
url: 'http://localhost:8080/files',
method: 'POST',
processData: false,
contentType: false,
data: formData,
success: function(d) {
console.log(d);
}
});
}
</script>
</head>
<body>
Msg: <input id="msg" type="text">
<input id="files" type="file" multiple>
<button onclick="submit()">Submit</button>
</body>
</html>
위와 같이 비동기로 처리하셔도 되고, html form을 이용해서 넘기셔도 됩니다.
용량제한에 걸릴 경우는 아래와 같이 설정 변경해주시면 됩니다.
spring:
servlet:
multipart:
max-file-size: -1 # default 1MB
max-request-size: -1 # default 10MB
오늘은 간단하게 여기까지^^
'Java > Spring Boot' 카테고리의 다른 글
Spring boot 파일 다운로드 (0) | 2019.05.17 |
---|---|
8. Spring Boot Security 5편 - Rest 방식으로 로그인 해보기 (20) | 2016.06.14 |
7. Spring Boot Security 4편 - 그 외 기능들 (0) | 2016.06.12 |
6. Spring Boot Security 3편 - 패스워드 암호화 (7) | 2016.06.12 |
4-1(번외). MyBatis의 TypeHandler를 이용해 GrantedAuthority 바로 받기 (3) | 2016.06.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 타보유모차
- mybatis
- 어드보케이트
- mockmvc
- 빠른 정렬
- controller test
- angular 2
- routing
- angular
- 유아동겸용
- rest login
- test static import
- 머지소트
- spring security
- TypeScript
- 거품정렬
- Ajax
- router-outlet
- 알고리즘
- RouteConfig
- Spring Boot
- routerLink
- 티지유모차
- routeParams
- styleUrls
- 기내반입유모차
- angular2
- templateUrl
- CURL
- insert sort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함