FileController.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.tzld.piaoquan.api.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.stuuudy.commons.external.filestorage.enums.EnumPublicBuckets;
  4. import com.tzld.piaoquan.api.common.enums.ExceptionEnum;
  5. import com.tzld.piaoquan.api.common.exception.CommonException;
  6. import com.tzld.piaoquan.api.config.AliOssConfig;
  7. import com.tzld.piaoquan.api.model.param.FileUploadParam;
  8. import com.tzld.piaoquan.api.model.param.OssUploadSignParam;
  9. import com.tzld.piaoquan.api.model.param.contentplatform.StsTokenParam;
  10. import com.tzld.piaoquan.api.model.vo.FileInfo;
  11. import com.tzld.piaoquan.api.model.vo.SignatureVO;
  12. import com.tzld.piaoquan.api.model.vo.StsTokenVO;
  13. import com.tzld.piaoquan.api.util.AliOssFileTool;
  14. import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
  15. import io.swagger.annotations.ApiOperation;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.validation.BindingResult;
  19. import org.springframework.validation.annotation.Validated;
  20. import org.springframework.web.bind.annotation.CrossOrigin;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.RequestMapping;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import javax.servlet.http.HttpServletRequest;
  25. import java.io.IOException;
  26. @RestController
  27. @RequestMapping("/file")
  28. @Slf4j
  29. public class FileController {
  30. @CrossOrigin(origins = "*")
  31. @PostMapping("/upload")
  32. public CommonResponse<FileInfo> fileUpload(@Validated FileUploadParam param, BindingResult bindingResult) throws IOException {
  33. if (bindingResult.hasErrors()) {
  34. return CommonResponse.create(ExceptionEnum.PARAM_ERROR.getCode(), bindingResult.getAllErrors().get(0).getDefaultMessage());
  35. }
  36. if (StringUtils.isBlank(param.getFileUri())) {
  37. String fileName = param.getFile().getOriginalFilename();
  38. if (StringUtils.isBlank(fileName)) {
  39. param.setFileUri("temp/" + System.currentTimeMillis());
  40. } else {
  41. param.setFileUri("temp/" + System.currentTimeMillis() + "_" + fileName.replace(" ", "_"));
  42. }
  43. }
  44. String fileUrl = AliOssFileTool.saveInPublicReturnHost(param.getFile().getInputStream(),
  45. EnumPublicBuckets.PUBBUCKET, param.getFileUri(), param.getFileType());
  46. FileInfo fileInfo = new FileInfo();
  47. fileInfo.setFileUrl(fileUrl);
  48. String bucketName = AliOssConfig.getBucket(EnumPublicBuckets.PUBBUCKET.getBucketName());
  49. boolean isExistFile = AliOssFileTool.getOssClient().doesObjectExist(bucketName, param.getFileUri());
  50. if (!isExistFile) {
  51. throw new CommonException(ExceptionEnum.PARAM_ERROR.getCode(), "上传文件不存在!!");
  52. }
  53. return CommonResponse.create(fileInfo);
  54. }
  55. @CrossOrigin(origins = "*")
  56. @PostMapping("/signature")
  57. @ApiOperation(value = "获取签名")
  58. public CommonResponse<SignatureVO> signature(@Validated OssUploadSignParam ossUploadSignParam) {
  59. log.info("获取OSS签名失败 param" + JSON.toJSONString(ossUploadSignParam));
  60. SignatureVO signatureVO;
  61. try {
  62. signatureVO = AliOssFileTool.getUploadPolicy(ossUploadSignParam.getFileType());
  63. } catch (Exception e) {
  64. log.error("获取OSS签名失败", e);
  65. return CommonResponse.create(ExceptionEnum.SYSTEM_ERROR.getCode(), "获取OSS签名失败");
  66. }
  67. return CommonResponse.success(signatureVO);
  68. }
  69. /**
  70. * 尽量控制前端获取oss权限,降低安全风险
  71. * 有效期为15分钟,getStsToken接口为1小时
  72. *
  73. * @param stsTokenParam
  74. * @param request
  75. * @return
  76. * @throws Exception
  77. */
  78. @CrossOrigin(origins = "*")
  79. @PostMapping("/getTempStsToken")
  80. @ApiOperation(value = "获取STS临时令牌")
  81. public CommonResponse<StsTokenVO> getTempStsToken(StsTokenParam stsTokenParam, HttpServletRequest request) throws Exception {
  82. log.info("获取STS临时令牌 param" + JSON.toJSONString(stsTokenParam));
  83. StsTokenVO stsTokenVO;
  84. try {
  85. String fileName = AliOssFileTool.getRandomObjectKey(stsTokenParam.getFileType());
  86. stsTokenVO = AliOssFileTool.getStsToken(fileName, 15 * 60L);
  87. } catch (Exception e) {
  88. log.error("获取STS临时令牌", e);
  89. return CommonResponse.create(ExceptionEnum.SYSTEM_ERROR.getCode(), "获取STS临时令牌失败");
  90. }
  91. return CommonResponse.success(stsTokenVO);
  92. }
  93. }