SpringBoot 파일 업로드 인터페이스 구현
8666 단어 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);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.