package org.dromara.resource.dubbo; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.factory.OssFactory; import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.domain.RemoteFile; import org.dromara.resource.domain.bo.SysOssBo; import org.dromara.resource.service.ISysOssService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * 文件请求处理 * * @author Lion Li */ @Slf4j @Service @RequiredArgsConstructor @DubboService public class RemoteFileServiceImpl implements RemoteFileService { private final ISysOssService sysOssService; /** * 文件上传请求 */ @Transactional(rollbackFor = Exception.class) @Override public RemoteFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException { try { String suffix = StringUtils.substring(originalFilename, originalFilename.lastIndexOf("."), originalFilename.length()); OssClient storage = OssFactory.instance(); UploadResult uploadResult = storage.uploadSuffix(file, suffix, contentType); // 保存文件信息 SysOssBo oss = new SysOssBo(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalFilename); oss.setService(storage.getConfigKey()); sysOssService.insertByBo(oss); RemoteFile sysFile = new RemoteFile(); sysFile.setOssId(oss.getOssId()); sysFile.setName(uploadResult.getFilename()); sysFile.setUrl(uploadResult.getUrl()); return sysFile; } catch (Exception e) { log.error("上传文件失败", e); throw new ServiceException("上传文件失败"); } } /** * 通过ossId查询对应的url * * @param ossIds ossId串逗号分隔 * @return url串逗号分隔 */ @Override public String selectUrlByIds(String ossIds) { return sysOssService.selectUrlByIds(ossIds); } }