diff --git a/src/main/java/org/ils/file/controller/FileDetailController.java b/src/main/java/org/ils/file/controller/FileDetailController.java index 9db1553..66c5fb4 100644 --- a/src/main/java/org/ils/file/controller/FileDetailController.java +++ b/src/main/java/org/ils/file/controller/FileDetailController.java @@ -1,20 +1,19 @@ package org.ils.file.controller; -import cn.xuyanwu.spring.file.storage.FileInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.ils.file.service.impl.IlsFileDetailServiceImpl; +import org.ils.file.utils.Result; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; /** @@ -37,17 +36,28 @@ public class FileDetailController { */ @ApiOperation("上传文件-返回fileInfo") @RequestMapping(value = "upload", method = RequestMethod.POST) - public FileInfo upload(MultipartFile file) { - return ilsFileDetailService.upload(file); + public Result upload(MultipartFile file) throws InterruptedException { + return Result.ok(ilsFileDetailService.upload(file)); } + + /** + * 上传文件 + */ + @ApiOperation("上传文件-返回fileInfo") + @RequestMapping(value = "uploadInputStream", method = RequestMethod.POST) + public Result uploadInputStream(InputStream inputStream) { + return Result.ok(ilsFileDetailService.uploadInputStream(inputStream)); + } + + /** * 上传文件,成功返回文件 url */ @ApiOperation("上传文件-返回url") @RequestMapping(value = "uploadUrl", method = RequestMethod.POST) - public String uploadUrl(MultipartFile file) { - return ilsFileDetailService.uploadUrl(file); + public Result uploadUrl(MultipartFile file) { + return Result.ok(ilsFileDetailService.uploadUrl(file)); } /** @@ -57,8 +67,8 @@ public class FileDetailController { */ @ApiOperation("上传图片-缩略图") @RequestMapping(value = "uploadImage", method = RequestMethod.POST) - public FileInfo uploadImage(MultipartFile file) { - return ilsFileDetailService.uploadImage(file); + public Result uploadImage(MultipartFile file) { + return Result.ok(ilsFileDetailService.uploadImage(file)); } /** @@ -66,8 +76,8 @@ public class FileDetailController { */ @ApiOperation("上传文件到指定阿里云存储平台,成功返回文件信息") @RequestMapping(value = "uploadPlatform", method = RequestMethod.POST) - public FileInfo uploadPlatform(MultipartFile file, String platform) { - return ilsFileDetailService.uploadPlatform(file, platform); + public Result uploadPlatform(MultipartFile file, String platform) { + return Result.ok(ilsFileDetailService.uploadPlatform(file, platform)); } /** @@ -84,8 +94,8 @@ public class FileDetailController { */ @ApiOperation("根据url和文件后缀上传文件") @RequestMapping(value = "uploadByUrl", method = RequestMethod.POST) - public FileInfo uploadByUrl(String url, String contentType, HttpServletResponse response) throws IOException { - return ilsFileDetailService.uploadByUrl(url, contentType, response); + public Result uploadByUrl(String url, String contentType, HttpServletResponse response) throws IOException { + return Result.ok(ilsFileDetailService.uploadByUrl(url, contentType, response)); } /** @@ -93,8 +103,8 @@ public class FileDetailController { */ @ApiOperation("根据base64内容和文件后缀上传文件") @RequestMapping(value = "uploadByBase64", method = RequestMethod.POST) - public FileInfo uploadByBase64(String base64, String contentType, HttpServletResponse response) throws IOException { - return ilsFileDetailService.uploadByBase64(base64, contentType, response); + public Result uploadByBase64(String base64, String contentType, HttpServletResponse response) throws IOException { + return Result.ok(ilsFileDetailService.uploadByBase64(base64, contentType, response)); } } diff --git a/src/main/java/org/ils/file/exception/GlobalExceptionHandler.java b/src/main/java/org/ils/file/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..a8a8b59 --- /dev/null +++ b/src/main/java/org/ils/file/exception/GlobalExceptionHandler.java @@ -0,0 +1,21 @@ +package org.ils.file.exception; + +import org.ils.file.utils.Result; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +/** + * 统一异常类 + * @author chenjf + */ +@ControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(value = Exception.class) + @ResponseBody + public Result handleCustomException(HttpServletRequest request, Exception e) { + return Result.error(e.getMessage()); + } +} diff --git a/src/main/java/org/ils/file/service/IlsFileDetailService.java b/src/main/java/org/ils/file/service/IlsFileDetailService.java index 96a9ce4..75564ae 100644 --- a/src/main/java/org/ils/file/service/IlsFileDetailService.java +++ b/src/main/java/org/ils/file/service/IlsFileDetailService.java @@ -6,6 +6,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; /** * @author chenjf @@ -17,6 +18,11 @@ public interface IlsFileDetailService { */ public FileInfo upload(MultipartFile file); + + /** + * 上传文件 + */ + public FileInfo uploadInputStream(InputStream inputStream); /** * 上传文件,成功返回文件 url */ diff --git a/src/main/java/org/ils/file/service/impl/IlsFileDetailServiceImpl.java b/src/main/java/org/ils/file/service/impl/IlsFileDetailServiceImpl.java index f3c4c9a..1f0be51 100644 --- a/src/main/java/org/ils/file/service/impl/IlsFileDetailServiceImpl.java +++ b/src/main/java/org/ils/file/service/impl/IlsFileDetailServiceImpl.java @@ -1,7 +1,5 @@ package org.ils.file.service.impl; -import cn.hutool.core.io.FileUtil; -import cn.xuyanwu.spring.file.storage.Downloader; import cn.xuyanwu.spring.file.storage.FileInfo; import cn.xuyanwu.spring.file.storage.FileStorageService; import lombok.extern.slf4j.Slf4j; @@ -37,6 +35,11 @@ public class IlsFileDetailServiceImpl implements IlsFileDetailService { return fileInfo; } + @Override + public FileInfo uploadInputStream(InputStream inputStream) { + FileInfo fileInfo = fileStorageService.of(inputStream).upload(); + return fileInfo; + } @Override @@ -56,7 +59,7 @@ public class IlsFileDetailServiceImpl implements IlsFileDetailService { public FileInfo uploadImage(MultipartFile file) { FileInfo fileInfo = fileStorageService.of(file) .image(img -> img.size(1000,1000)) //将图片大小调整到 1000*1000 - .thumbnail(th -> th.size(200,200)) //再生成一张 200*200 的缩略图 + .thumbnail(th -> th.size(600,600)) //再生成一张 600*600 的缩略图 .upload(); return fileInfo; } diff --git a/src/main/java/org/ils/file/utils/CommonConstant.java b/src/main/java/org/ils/file/utils/CommonConstant.java new file mode 100644 index 0000000..9215025 --- /dev/null +++ b/src/main/java/org/ils/file/utils/CommonConstant.java @@ -0,0 +1,32 @@ +package org.ils.file.utils; + +/** + * 通用常量 + */ +public interface CommonConstant { + + /** + * 没有服务 + */ + Integer HTTP_CODE_500 = 500; + /** + * 响应正常 + */ + Integer HTTP_CODE_200 = 200; + + /** + * 无授权 + */ + Integer HTTP_CODE_510 = 510; + + + /** + * 400错误 + */ + Integer HTTP_CODE_400 = 400; + + /** + * 响应正常,错误提示 + */ + Integer HTTP_CODE_201 = 201; +} diff --git a/src/main/java/org/ils/file/utils/Result.java b/src/main/java/org/ils/file/utils/Result.java new file mode 100644 index 0000000..3a61032 --- /dev/null +++ b/src/main/java/org/ils/file/utils/Result.java @@ -0,0 +1,151 @@ +package org.ils.file.utils; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 接口返回数据格式 + * @author chenjf + * @date 2023/07/14 + * @param + */ +@Data +public class Result implements Serializable { + + + + + @ApiModelProperty(value = "成功标志") + private boolean success = true; + + + @ApiModelProperty(value = "返回处理消息") + private String message = ""; + + + @ApiModelProperty(value = "返回代码") + private Integer code = CommonConstant.HTTP_CODE_200; + + + @ApiModelProperty(value = "返回数据对象") + private T result; + + + @ApiModelProperty(value = "时间戳") + private long timestamp = System.currentTimeMillis(); + + public Result() { + } + + /** + * + * @param code 响应code + * @param message 消息 + */ + public Result(Integer code, String message) { + this.code = code; + this.message = message; + } + + /** + * + * @param message 消息 + */ + public Result success(String message) { + this.message = message; + this.code = CommonConstant.HTTP_CODE_200; + this.success = true; + return this; + } + + public static Result ok() { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + return r; + } + + public static Result ok(String msg) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D + r.setResult((T) msg); + r.setMessage(msg); + return r; + } + + public static Result ok(T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + r.setResult(data); + return r; + } + + public static Result OK() { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + return r; + } + + + public static Result OK(String msg) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + r.setMessage(msg); + r.setResult((T) msg); + return r; + } + + public static Result OK(T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + r.setResult(data); + return r; + } + + public static Result OK(String msg, T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.HTTP_CODE_200); + r.setMessage(msg); + r.setResult(data); + return r; + } + + public static Result error(String msg, T data) { + Result r = new Result(); + r.setSuccess(false); + r.setCode(CommonConstant.HTTP_CODE_201); + r.setMessage(msg); + r.setResult(data); + return r; + } + + public static Result error(String msg) { + return error(CommonConstant.HTTP_CODE_201, msg); + } + + public static Result error(int code, String msg) { + Result r = new Result(); + r.setCode(code); + r.setMessage(msg); + r.setSuccess(false); + return r; + } + + public Result error500(String message) { + this.message = message; + this.code = CommonConstant.HTTP_CODE_500; + this.success = false; + return this; + } + + +} \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index eaa19bf..ae2fcba 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,5 +1,8 @@ server: port: 9098 +feign: + hystrix: + enabled: true spring: mvc: pathmatch: @@ -9,7 +12,7 @@ spring: max-file-size: 100MB max-request-size: 100MB datasource: - url: jdbc:mysql://127.0.0.1:3306/ils_fileStorage?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True&useSSL=false + url: jdbc:mysql://127.0.0.1:3306/ils_fileStorage?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver