package com.qianwen.smartman.modules.resource.endpoint; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import io.swagger.annotations.Api; import me.zhyd.oauth.log.Log; import java.io.IOException; import java.io.InputStream; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.time.DateUtils; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.oss.model.OssFile; import com.qianwen.core.scanner.modular.annotation.GetResource; import com.qianwen.core.scanner.modular.annotation.PostResource; import com.qianwen.core.scanner.modular.stereotype.ApiResource; import com.qianwen.core.tenant.annotation.NonDS; import com.qianwen.core.tool.api.R; import com.qianwen.core.tool.utils.FileUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.resource.entity.Attach; import com.qianwen.smartman.modules.resource.service.IAttachService; import com.qianwen.smartman.modules.resource.vo.OssFileVO; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @Api(value = "对象存储端点", tags = {"对象存储端点"}) @RestController @ApiResource({"blade-resource/oss/endpoint"}) @NonDS /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/resource/endpoint/OssEndpointController.class */ public class OssEndpointController { private final OssBuilder ossBuilder; private final IAttachService attachService; public OssEndpointController(final OssBuilder ossBuilder, final IAttachService attachService) { this.ossBuilder = ossBuilder; this.attachService = attachService; } @PostResource({"/make-bucket"}) public R makeBucket(@RequestParam String bucketName) { this.ossBuilder.template().makeBucket(bucketName); return R.success("创建成功"); } @PostResource({"/remove-bucket"}) public R removeBucket(@RequestParam String bucketName) { this.ossBuilder.template().removeBucket(bucketName); return R.success("删除成功"); } @PostResource({"/copy-file"}) public R copyFile(@RequestParam String fileName, @RequestParam String destBucketName, String destFileName) { this.ossBuilder.template().copyFile(fileName, destBucketName, destFileName); return R.success("操作成功"); } @GetResource({"/stat-file"}) public R statFile(@RequestParam String fileName) { return R.data(this.ossBuilder.template().statFile(fileName)); } @GetResource({"/file-path"}) public R filePath(@RequestParam String fileName) { return R.data(this.ossBuilder.template().filePath(fileName)); } @GetResource({"/file-link"}) public R fileLink(@RequestParam String fileName) { return R.data(this.ossBuilder.template().fileLink(fileName)); } @GetResource({"/file-content"}) public void getFileContent(@RequestParam String fileName, HttpServletResponse response) { try (InputStream objectStream = this.ossBuilder.template().getObject(fileName)) { response.setContentType("application/octet-stream; charset=UTF-8"); response.addHeader("Expires", "0"); response.addHeader("Pragma", "no-cache"); response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate"); IoUtil.copy(objectStream, response.getOutputStream()); } catch (IOException e) { Log.error("获取文件内容错误",e); e.printStackTrace(); } catch (Exception e) { throw new ServiceException("文件不存在"); } } @PostResource({"/put-file"}) public R putFile(@RequestParam MultipartFile file) { BladeFile bladeFile = this.ossBuilder.template().putFile(file.getOriginalFilename(), file); return R.data(bladeFile); } @PostResource({"/put-file-detail"}) public R putFileWithDeatil(@RequestParam MultipartFile file) { BladeFile bladeFile = this.ossBuilder.template().putFile(file.getOriginalFilename(), file); OssFile ossFile = this.ossBuilder.template().statFile(bladeFile.getName()); OssFileVO ossFileVO = OssFileVO.builder().length(ossFile.getLength()).putTimeStr(DateUtil.format(DateUtils.addHours(ossFile.getPutTime(), 8), DatePattern.NORM_DATETIME_MINUTE_FORMAT)).oriFileName(bladeFile.getOriginalName()).link(bladeFile.getLink()).build(); return R.data(ossFileVO); } @PostResource({"/put-file-by-name"}) public R putFileByName(@RequestParam String fileName, @RequestParam MultipartFile file) { BladeFile bladeFile = this.ossBuilder.template().putFile(fileName, file); return R.data(bladeFile); } @PostResource({"/put-file-attach"}) public R putFileAttach(@RequestParam MultipartFile file) { try { String fileName = file.getOriginalFilename(); BladeFile bladeFile = this.ossBuilder.template().putFile(fileName, file.getInputStream()); Long attachId = buildAttach(fileName, Long.valueOf(file.getSize()), bladeFile); bladeFile.setAttachId(attachId); return R.data(bladeFile); } catch (Throwable ex) { //log.error("putFileAttachByName,异常,file={}",fileName,ex); throw new ServiceException("putFileAttach异常"+ex.getMessage()); } } @PostResource({"/put-file-attach-by-name"}) public R putFileAttachByName(@RequestParam String fileName, @RequestParam MultipartFile file) { try { BladeFile bladeFile = this.ossBuilder.template().putFile(fileName, file.getInputStream()); Long attachId = buildAttach(fileName, Long.valueOf(file.getSize()), bladeFile); bladeFile.setAttachId(attachId); return R.data(bladeFile); } catch (Throwable ex) { //log.error("putFileAttachByName,异常,file={}",fileName,ex); throw new ServiceException("putFileAttachByName异常"+ex.getMessage()); } } private Long buildAttach(String fileName, Long fileSize, BladeFile bladeFile) { String fileExtension = FileUtil.getFileExtension(fileName); Attach attach = new Attach(); attach.setDomainName(bladeFile.getDomain()); attach.setLink(bladeFile.getLink()); attach.setName(bladeFile.getName()); attach.setOriginalName(bladeFile.getOriginalName()); attach.setAttachSize(fileSize); attach.setExtension(fileExtension); this.attachService.save(attach); return attach.getId(); } @PostResource({"/remove-file"}) public R removeFile(@RequestParam String fileName) { this.ossBuilder.template().removeFile(fileName); return R.success("操作成功"); } @PostResource({"/remove-files"}) public R removeFiles(@RequestParam String fileNames) { this.ossBuilder.template().removeFiles(Func.toStrList(fileNames)); return R.success("操作成功"); } @PostResource({"/get-file-detail"}) public R getFileDetail(@RequestParam MultipartFile file) { try { BladeFile bladeFile = this.ossBuilder.template().putFile(file.getName(), file.getInputStream()); long size = file.getSize(); Long attachId = buildAttach(file.getName(), Long.valueOf(size), bladeFile); bladeFile.setAttachId(attachId); return R.data(bladeFile); } catch (Throwable ex) { //log.error("putFileAttachByName,异常,file={}",fileName,ex); throw new ServiceException("getFileDetail异常"+ex.getMessage()); } } }