ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
@@ -24,6 +24,7 @@ import org.dromara.common.oss.properties.OssProperties; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.Date; @@ -115,6 +116,18 @@ return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build(); } public UploadResult upload(File file, String path) { try { PutObjectRequest putObjectRequest = new PutObjectRequest(properties.getBucketName(), path, file); // 设置上传对象的 Acl 为公共读 putObjectRequest.setCannedAcl(getAccessPolicy().getAcl()); client.putObject(putObjectRequest); } catch (Exception e) { throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]"); } return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build(); } public void delete(String path) { path = path.replace(getUrl() + "/", ""); try { @@ -132,6 +145,10 @@ return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType); } public UploadResult uploadSuffix(File file, String suffix) { return upload(file, getPath(properties.getPrefix(), suffix)); } /** * 获取文件元数据 * ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java
@@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.List; @@ -26,6 +27,8 @@ SysOssVo upload(MultipartFile file); SysOssVo upload(File file); void download(Long ossId, HttpServletResponse response) throws IOException; Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -27,11 +27,13 @@ import org.dromara.system.service.ISysOssService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; import org.springframework.cache.annotation.Cacheable; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -130,12 +132,27 @@ throw new ServiceException(e.getMessage()); } // 保存文件信息 return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); } @Override public SysOssVo upload(File file) { String originalfileName = file.getName(); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); OssClient storage = OssFactory.instance(); UploadResult uploadResult = storage.uploadSuffix(file, suffix); // 保存文件信息 return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); } @NotNull private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult) { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(storage.getConfigKey()); oss.setService(configKey); baseMapper.insert(oss); SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); return this.matchingUrl(sysOssVo);