SpringBoot 파일 업로드 인터페이스 구현

요약
회 사 는 모두 SpringBoot 를 프로젝트 프레임 워 크 로 사용 하고 있 습 니 다.사실 SpringBoot 는 SSM 프레임 워 크 와 가 깝 습 니 다.기본적으로 SSM 의 일부 설정 항목 을 자동 설정 이나 간단 한 주해 설정 으로 수정 하면 됩 니 다.모 르 는 SpringBoot 를 권장 하 는 친구 들 은 손 이 빠 르 고 사실 파일 업로드 프레임 워 크 는 큰 관계 가 없습니다.나 는 단지 스프링 부 트 를 도와 광 고 를 할 뿐이다.
본론
필요:파일 업로드 웹 인 터 페 이 스 를 구현 해 야 합 니 다.
1.먼저 컨트롤 러 인 터 페 이 스 를 실현 하고 다음 과 같다.

package com.lanxuewei.utils.aspect;

import com.lanxuewei.utils.interceptor.annotation.AppIdAuthorization;
import com.lanxuewei.utils.model.ReturnCodeAndMsgEnum;
import com.lanxuewei.utils.model.ReturnValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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;

/**
 * @author lanxuewei Create in 2018/7/3 20:01
 * Description: aop      
 */
@RestController
@RequestMapping(value = "/aop")
public class TestController {

 private static final Logger logger = LoggerFactory.getLogger(TestController.class);

 @Autowired
 private TestService testService;

 /**
 *         
 * @return
 */
 @AppIdAuthorization
 @RequestMapping("/upload")
 public ReturnValue uploadFileTest(@RequestParam("uploadFile") MultipartFile zipFile) {
 return testService.uploadFileTest(zipFile);
 }
}
2.서비스 인 터 페 이 스 는 다음 과 같다.

package com.lanxuewei.utils.aspect;

import org.springframework.web.multipart.MultipartFile;

import com.lanxuewei.utils.model.ReturnValue;

public interface TestService {

 public ReturnValue uploadFileTest(MultipartFile zipFile);
}
3.서비스 실현 은 다음 과 같다.

package com.lanxuewei.utils.aspect;

import com.lanxuewei.utils.model.ReturnCodeAndMsgEnum;
import com.lanxuewei.utils.model.ReturnValue;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;

/**
 * @author lanxuewei Create in 2018/8/14 10:01
 * Description: 
 */
@Service
public class TestServiceImp implements TestService {

 private static final Logger logger = LoggerFactory.getLogger(TestServiceImp.class);

 @Override
 public ReturnValue uploadFileTest(MultipartFile zipFile) {
 String targetFilePath = "D:\\test\\uploadTest";
 String fileName = UUID.randomUUID().toString().replace("-", "");
 File targetFile = new File(targetFilePath + File.separator + fileName);

 FileOutputStream fileOutputStream = null;
 try {
  fileOutputStream = new FileOutputStream(targetFile);
  IOUtils.copy(zipFile.getInputStream(), fileOutputStream);
  logger.info("------>>>>>>uploaded a file successfully!<<<<<<------");
 } catch (IOException e) {
  return new ReturnValue<>(-1, null);
 } finally {
  try {
  fileOutputStream.close();
  } catch (IOException e) {
  logger.error("", e);
  }
 }
 return new ReturnValue<>(ReturnCodeAndMsgEnum.Success, null);
 }
}
설명:
1.targetFilePath 는 파일 저장 경로 이 고 본인 은 테스트 에 사용 하기 때문에 경 로 를 지정 하고 실제 상황 에 따라 수정 할 수 있 습 니 다.
2.fileName 은 UUID 로 생 성 되 며,파일 이름 이 유일 하 게 중복 되 지 않도록 합 니 다.그러나 원본 파일 접 두 사 는 유지 되 지 않 습 니 다.원본 파일 이름 을 가 져 온 후 lastIndexOf(".")를 호출하여 원본 접 두 사 를 가 져 올 수 있 습 니 다.
3.IOUtils 는 org.apache.comons.io.IOUtils 입 니 다.오 류 를 가 져 오지 않도록 주의 하 십시오.
4.본 고 는 logback 로그 시스템 을 사용 하여 실제 상황 에 따라 수정 하거나 삭제 할 수 있 습 니 다.
ReturnValue 와 Return CodeAndMsgEnum 류 를 동봉 합 니 다.Controller 층 이 전단 으로 통일 적 으로 돌아 가 는 model 은 다음 과 같 습 니 다.

package com.lanxuewei.utils.model;

import java.io.Serializable;

/**
 * @author lanxuewei Create in 2018/7/3 20:05
 * Description:   web    
 */
public class ReturnValue<T> implements Serializable {
 private static final long serialVersionUID = -1959544190118740608L;
 private int ret;
 private String msg;
 private T data;

 public ReturnValue() {
 this.ret = 0;
 this.msg = "";
 this.data = null;
 }

 public ReturnValue(int retCode, String msg, T data) {
 this.ret = 0;
 this.msg = "";
 this.data = null;
 this.ret = retCode;
 this.data = data;
 this.msg = msg;
 }

 public ReturnValue(int retCode, String msg) {
 this.ret = 0;
 this.msg = "";
 this.data = null;
 this.ret = retCode;
 this.msg = msg;
 }

 public ReturnValue(ReturnCodeAndMsgEnum codeAndMsg) {
 this(codeAndMsg.getCode(), codeAndMsg.getMsg(), null);
 }

 public ReturnValue(ReturnCodeAndMsgEnum codeAndMsg, T data) {
 this(codeAndMsg.getCode(), codeAndMsg.getMsg(), data);
 }

 public int getRet() {
 return this.ret;
 }

 public void setRet(int ret) {
 this.ret = ret;
 }

 public String getMsg() {
 return this.msg;
 }

 public void setMsg(String msg) {
 this.msg = msg;
 }

 public T getData() {
 return this.data;
 }

 public void setData(T data) {
 this.data = data;
 }

 @Override
 public String toString() {
 return "ReturnValue{" +
  "ret=" + ret +
  ", msg='" + msg + '\'' +
  ", data=" + data +
  '}';
 }
}

package com.lanxuewei.utils.model;

/**
 * @author lanxuewei Create in 2018/7/3 20:06
 * Description: web          
 */
public enum ReturnCodeAndMsgEnum {
 Success(0, "ok"),
 No_Data(-1, "no data"),
 SYSTEM_ERROR(10004, "system error");

 private String msg;
 private int code;

 private ReturnCodeAndMsgEnum(int code, String msg) {
 this.code = code;
 this.msg = msg;
 }

 public static ReturnCodeAndMsgEnum getByCode(int code) {
 ReturnCodeAndMsgEnum[] var1 = values();
 int var2 = var1.length;

 for(int var3 = 0; var3 < var2; ++var3) {
  ReturnCodeAndMsgEnum aiTypeEnum = var1[var3];
  if (aiTypeEnum.code == code) {
  return aiTypeEnum;
  }
 }

 return Success;
 }

 public String getMsg() {
 return this.msg;
 }

 public int getCode() {
 return this.code;
 }
}
Postman 에서 결 과 를 되 돌려 달라 고 요청 하 는 데 성 공 했 습 니 다.상기 코드 는 upload File 의 매개 변수 만 있 으 면 됩 니 다.

주의사항:application.properties 프로필 에서 파일 업로드 관련 속성 을 설정 할 수 있 고 업로드 파일 크기 제한 을 설정 할 수 있 습 니 다.
단일 파일 최대 제한:spring.servlet.multipart.max-file-size=50Mb
단일 요청 최대 제한:spring.servlet.multipart.max-request-size=70Mb
요약:본 논문 의 기능 이 비교적 간단 하기 때문에 일부 과정 은 더욱 세밀 한 과정 과 규범 코드 가 없다.예 를 들 어 저장 경 로 는 프로젝트 경 로 를 사용 하고 새로운 파일 이름 은 원래 파일 접미사 와 일치 하 는 등 필요 한 파트너 는 자신의 업무 에 따라 수정 할 수 있다.
계속,코드 가 너무 자 유 롭 지 않 은 것 같 습 니 다.파일 업 로드 를 보충 하여 파일 접미사 관련 함 수 를 얻 습 니 다.

private String getFileSuffix(MultipartFile file) {
 if (file == null) {
  return null;
 }
 String fileName = file.getOriginalFilename();
 int suffixIndex = fileName.lastIndexOf(".");
 if (suffixIndex == -1) { //    
  return null;
 } else {   //     
  return fileName.substring(suffixIndex, fileName.length());
 }
 }
파일 이름 을 무 작위 로 생 성 한 후 다음 코드 를 추가 하면 됩 니 다.파일 접미사 가 비어 있 지 않 으 면 새로 생 성 된 파일 이름 에 추가 하면 됩 니 다.

String fileSuffix = getFileSuffix(zipFile);
 if (fileSuffix != null) { //     
  fileName += fileSuffix;
 }
 File targetFile = new File(targetFilePath + File.separator + fileName);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기