Spring Boot 통합 웹 층 실현 과정 상세 설명

6511 단어 SpringBootweb층.
Spring Boot 에서 Spring MVC 의 파일 업로드 가 일맥상통 합 니 다.shift 를 두 번 눌 러 서 Commons Multipart Resolver 라 는 종 류 를 찾 습 니 다.파일 업로드 의 실현 클래스 입 니 다.우 리 는 먼저 소스 코드 를 살 펴 보 자.

우 리 는 그것 이 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>
전단 에서 가 져 온 파일 을 배열 에 저장 하고 모든 파일 을 옮 겨 다 니 며 단일 파일 과 일치 하 는 것 입 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기