Spring Boot 통합 웹 층 실현 과정 상세 설명
우 리 는 그것 이 MultipartResolver 의 실현 류 라 는 것 을 볼 수 있 습 니 다.우 리 는 Ctrl+H 를 더 하면 오른쪽 MultipartResolver 의 두 가지 실현 류 를 볼 수 있 습 니 다.첫 번 째 실현 클래스 는 servlet 3.0 이후 아무것도 추가 하지 않 고 바로 사용 할 수 있 습 니 다.두 번 째 실현 류 의 호환성 이 좋 고 초기의 servlet 도 사용 할 수 있 지만 자신의 추가 적 인 의존 이 필요 하 다.그러면 Spring Boot 에서 우 리 는 첫 번 째 실현 클래스 를 사용 하여 파일 업 로드 를 완성 할 수 있 습 니 다.
controller 하나 와 정적 html 파일 하나만 있 으 면 됩 니 다.코드 를 먼저 보 세 요.
package com.zl.upload;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import java.util.logging.SimpleFormatter;
@RestController
public class UploadController {
SimpleDateFormat ss=new SimpleDateFormat("yyyy/MM/dd/");
@PostMapping("/upload")
//HttpServletRequest request ,
public String upload(MultipartFile multipartFile , HttpServletRequest request){
//
String format = ss.format(new Date());
String realpath = request.getServletContext().getRealPath("img") + format;
//
File f = new File(realpath);
if(!f.exists()){
f.mkdirs();
}
// ,
String oldName = multipartFile.getOriginalFilename();
System.out.println(oldName);
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
//
try {
multipartFile.transferTo(new File(f,newName));
// , , http, HTTPS
String path = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/img" + format + newName;
return path ;
} catch (IOException e) {
e.printStackTrace();
}
return "error";
}
}
첫 번 째 단 계 는 파일 의 저장 주소 와 경 로 를 만 듭 니 다.두 번 째 단계,파일 이름 수정
세 번 째 단계,파일 저장(파일,파일 이름)
백 엔 드 의 처리 가 끝 났 으 니 프론트 데스크 에서 어떻게 처리 하 는 지 봅 시다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="multipartFile">
<input type="submit" value=" ">
</form>
</body>
</html>
전단 처 리 는 간단 합 니 다.파일 업로드 채널 을 열 면 됩 니 다.그러나 이런 방법 은 앞 뒤 분리 개발 에 서 는 거의 사용 되 지 않 는 다.다음은 ajax 로 어떻게 실현 되 는 지 살 펴 보 자.
백 엔 드 는 변 하지 않 습 니 다.프론트 엔 드 는 ajax 로 바 꿉 니 다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ajax </title>
<script src="jquery-3.4.1.min.js"></script>
</head>
<script>
function uploads() {
alert("ss");
var multipartFile=$("#file")[0].files[0];
alert(multipartFile);
var formData=new FormData();
formData.append("multipartFile",multipartFile);
$.ajax({
type:'post',
url:'/upload',
processData:false,
contentType:false,
data:formData,
success:function (msg) {
$("#result").html(msg);
}
} )
}
</script>
<body>
<form enctype="multipart/form-data">
<input type="file" id="file">
<input type="button" value=" " onclick="uploads()">
</form>
<div id="result"></div>
</body>
</html>
이것 은 단일 파일 업로드 입 니 다.다 중 파일 업로드 라면 어떻게 처리 하 시 겠 습 니까?백 엔 드 처리
@PostMapping("/uploads")
//HttpServletRequest request ,
public String uploads(MultipartFile [] multipartFiles , HttpServletRequest request){
//
String format = ss.format(new Date());
String realpath = request.getServletContext().getRealPath("img") + format;
//
File f = new File(realpath);
if(!f.exists()){
f.mkdirs();
}
// for
for (MultipartFile file: multipartFiles){
String oldName = file.getOriginalFilename();
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
//
try {
file.transferTo(new File(f,newName));
// , , http, HTTPS
String path = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/img" + format + newName;
System.out.println(path);
} catch (IOException e) {
e.printStackTrace();
}
}
// ,
return "success";
}
전단 처리:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<form action="/uploads" method="post" enctype="multipart/form-data">
<input type="file" name="multipartFiles" multiple>
<input type="submit" value=" ">
</form>
</body>
</html>
전단 에서 가 져 온 파일 을 배열 에 저장 하고 모든 파일 을 옮 겨 다 니 며 단일 파일 과 일치 하 는 것 입 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.