Summernote 이미지 다중 업로드를 구현해 봅니다~~!
기존 파일 업로드와 크게 다르지 않음.. ㅎㅎ
사전준비 )
- summernote 관련 js, css 파일 다운로드
1. Summernote 선언부에 onImageUpload 추가하기!
$('#summernote').summernote({
height: 300,
minHeight: 100,
focus: true,
lang: "ko-KR",
placeholder: '최대 2048자까지 쓸 수 있습니다',
callbacks: {
onImageUpload : function(files) { // 이미지 업로드 펑션을 추가!
uploadSummernoteImageFile(files,this);
},
onPaste: function (e) {
var clipboardData = e.originalEvent.clipboardData;
if (clipboardData && clipboardData.items && clipboardData.items.length) {
var item = clipboardData.items[0];
if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
e.preventDefault();
}
}
}
}
});
onImageUpload를 통해 내가 선택한 파일을 가져올 수 있다.
2. 파일을 업로드할 함수 구현
function uploadSummernoteImageFile(file, editor) {
var data = new FormData();
// 다중파일 업로드를 위해 form에 담아주는 작업!
$.each(file, function(index, item){
data.append("files", item);
});
$.ajax({
data : data,
type : "POST",
url : "/files/reg", // controlle 매핑값 입력
contentType : false,
processData : false,
enctype: "multipart/form-data",
success : function(data) {
if(data.msg == "success") {
$.each(data.rows, function(index, item){
$(editor).summernote('insertImage', item);
});
}
}
});
}
업로드는 기존 파일 업로드와 많이 비슷하다~ 스크립트에서 form 을 생성하고
file들을 담아 Contorller로 전달해주는 순서이다.
@PostMapping("/reg")
public Map<String, Object> upload(@RequestParam("files") MultipartFile[] files) {
Map<String, Object> res = new HashMap<String, Object>();
String orgName= null, extension = null, newName = null;
List<String> list = new ArrayList<>(); // 업로드된 파일의 URL을 담아줄 List를 생성
try {
for (MultipartFile file : files) { // 전달받은 파일 개수만큼 반복!
orgName = file.getOriginalFilename(); // 실제 파일 이름
extension = FilenameUtils.getExtension(file.getOriginalFilename()); // 확장자
newName = Utils.nowToString() + FilenameUtils.EXTENSION_SEPARATOR + extension;
// Utils.nowToString()은 내가 구현한거~! 본인이 짓고 싶은 이름을 만들어주는 함수를 구현하면 된다.
File tmp = new File(FILE_UPLOAD_PATH + newName); // FILE_UPLOAD_PATH 파일이 업로드 되는 실제 경로
list.add("/upload/"+newName); // 출력될 파일 URL를 담아준다. ( 상대경로~ )
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), tmp);
} catch (IOException e) {
e.printStackTrace();
}
}
res.put("rows", list);// 업로드가 끝났다면 리스트를 담고
res.put("msg", "success"); // 성공사인으로 msg도 담아준다.
}catch (Exception e) {
e.printStackTrace();
res.put("msg", "fail"); // 에러가나는 경우 실패사인 담기
}
return res;
}
파일 리스트를 파라메터로 받아서 파일을 업로드해주고 그 경로를 다시 front 로 리턴해주는 방법이다.
예를 들기 위해 세부내용을 걷어 낸 코드로
파일을 업로드할땐 꼭 업로드 허용한 확장자인지, 메타데이터를 사용해 mine_type 검증을 해야한다.
'프로그래밍' 카테고리의 다른 글
| [ORACLE] UPDATE 문에 ORDER BY 사용하기 (0) | 2021.06.24 |
|---|---|
| [jQuery] name*=”value” 선택자 사용법! (0) | 2021.06.08 |
| [SPRING 카카오톡 로그인] #1 코드 작성 (0) | 2021.02.23 |
| [SPRING 카카오톡 로그인] #1 개발자사이트 설정 (0) | 2021.02.23 |
| [Google 로그인] #3 백엔드 코드작성! (0) | 2021.02.23 |