|
|
|
@ -57,6 +57,27 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
private final FileService fileService;
|
|
|
|
private final FileService fileService;
|
|
|
|
private final SysOssMapper baseMapper;
|
|
|
|
private final SysOssMapper baseMapper;
|
|
|
|
private static ThreadLocal<Boolean> IGNORE_THREAD_LOCAL = new ThreadLocal<>();
|
|
|
|
private static ThreadLocal<Boolean> IGNORE_THREAD_LOCAL = new ThreadLocal<>();
|
|
|
|
|
|
|
|
private static ThreadLocal<Service> SERVICE_THREAD_LOCAL = new ThreadLocal<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void setService(Service service, Runnable handle) {
|
|
|
|
|
|
|
|
SERVICE_THREAD_LOCAL.set(service);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
handle.run();
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
SERVICE_THREAD_LOCAL.remove();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public <T> T setService(Service service, Supplier<T> handle) {
|
|
|
|
|
|
|
|
SERVICE_THREAD_LOCAL.set(service);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
return handle.get();
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
SERVICE_THREAD_LOCAL.remove();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void ignore(Runnable handle) {
|
|
|
|
public void ignore(Runnable handle) {
|
|
|
|
@ -82,7 +103,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
public TableDataInfo<SysOssVo> queryPageList(SysOssBo bo, PageQuery pageQuery) {
|
|
|
|
public TableDataInfo<SysOssVo> queryPageList(SysOssBo bo, PageQuery pageQuery) {
|
|
|
|
LambdaQueryWrapper<SysOss> lqw = buildQueryWrapper(bo);
|
|
|
|
LambdaQueryWrapper<SysOss> lqw = buildQueryWrapper(bo);
|
|
|
|
Page<SysOssVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
Page<SysOssVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
List<SysOssVo> filterResult = result.getRecords().stream().map(this::matchingUrl).collect(Collectors.toList());
|
|
|
|
List<SysOssVo> filterResult = result.getRecords().stream().map(this::url).collect(Collectors.toList());
|
|
|
|
result.setRecords(filterResult);
|
|
|
|
result.setRecords(filterResult);
|
|
|
|
return TableDataInfo.build(result);
|
|
|
|
return TableDataInfo.build(result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -93,7 +114,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
for (Long id : ossIds) {
|
|
|
|
for (Long id : ossIds) {
|
|
|
|
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id);
|
|
|
|
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id);
|
|
|
|
if (ObjectUtil.isNotNull(vo)) {
|
|
|
|
if (ObjectUtil.isNotNull(vo)) {
|
|
|
|
list.add(this.matchingUrl(vo));
|
|
|
|
list.add(this.url(vo));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
return list;
|
|
|
|
@ -105,7 +126,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) {
|
|
|
|
for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) {
|
|
|
|
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id);
|
|
|
|
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id);
|
|
|
|
if (ObjectUtil.isNotNull(vo)) {
|
|
|
|
if (ObjectUtil.isNotNull(vo)) {
|
|
|
|
list.add(this.matchingUrl(vo).getUrl());
|
|
|
|
list.add(this.url(vo).getUrl());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return String.join(StringUtils.SEPARATOR, list);
|
|
|
|
return String.join(StringUtils.SEPARATOR, list);
|
|
|
|
@ -159,11 +180,10 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void download(String url, Service service, HttpServletResponse response) throws IOException {
|
|
|
|
public void download(String url, String service, HttpServletResponse response) throws IOException {
|
|
|
|
|
|
|
|
FileUtils.setAttachmentResponseHeader(response, FileNameUtil.getName(url));
|
|
|
|
FileUtils.setAttachmentResponseHeader(response, FileNameUtil.getName(url));
|
|
|
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
|
|
|
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
|
|
|
|
if (UPLOAD.equalsIgnoreCase(service)) {
|
|
|
|
if (UPLOAD.equalsIgnoreCase(service.name())) {
|
|
|
|
try (InputStream inputStream = new FileInputStream(fileService.getFile(url))) {
|
|
|
|
try (InputStream inputStream = new FileInputStream(fileService.getFile(url))) {
|
|
|
|
int available = inputStream.available();
|
|
|
|
int available = inputStream.available();
|
|
|
|
IoUtil.copy(inputStream, response.getOutputStream());
|
|
|
|
IoUtil.copy(inputStream, response.getOutputStream());
|
|
|
|
@ -172,7 +192,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
throw new ServiceException(e.getMessage());
|
|
|
|
throw new ServiceException(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
OssClient storage = OssFactory.instance(service);
|
|
|
|
OssClient storage = OssFactory.instance(service.name());
|
|
|
|
try (InputStream inputStream = storage.getObjectContent(url)) {
|
|
|
|
try (InputStream inputStream = storage.getObjectContent(url)) {
|
|
|
|
int available = inputStream.available();
|
|
|
|
int available = inputStream.available();
|
|
|
|
IoUtil.copy(inputStream, response.getOutputStream());
|
|
|
|
IoUtil.copy(inputStream, response.getOutputStream());
|
|
|
|
@ -183,6 +203,35 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public InputStream download(Long ossId) throws IOException {
|
|
|
|
|
|
|
|
SysOssVo sysOss = SpringUtils.getBean(ISysOssService.class).getById(ossId);
|
|
|
|
|
|
|
|
return download(sysOss);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public InputStream download(SysOssVo sysOss) throws IOException {
|
|
|
|
|
|
|
|
if (ObjectUtil.isNull(sysOss)) {
|
|
|
|
|
|
|
|
throw new ServiceException("文件数据不存在!");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (UPLOAD.equals(sysOss.getService())) {
|
|
|
|
|
|
|
|
return new FileInputStream(fileService.getFile(sysOss.getUrl()));
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
OssClient storage = OssFactory.instance(sysOss.getService());
|
|
|
|
|
|
|
|
return storage.getObjectContent(sysOss.getUrl());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public InputStream download(String url, Service service) throws IOException {
|
|
|
|
|
|
|
|
if (UPLOAD.equalsIgnoreCase(service.name())) {
|
|
|
|
|
|
|
|
return new FileInputStream(fileService.getFile(url));
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
OssClient storage = OssFactory.instance(service.name());
|
|
|
|
|
|
|
|
return storage.getObjectContent(url);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public SysOssVo save(InputStream in, String originalFileName, String contentType, String pre, String rule) {
|
|
|
|
public SysOssVo save(InputStream in, String originalFileName, String contentType, String pre, String rule) {
|
|
|
|
@ -191,7 +240,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
oss.setOriginalName(originalFileName);
|
|
|
|
oss.setOriginalName(originalFileName);
|
|
|
|
oss.setFileSuffix(suffix);
|
|
|
|
oss.setFileSuffix(suffix);
|
|
|
|
if (configService.selectOssEnabled()) {
|
|
|
|
if (configService.selectOssEnabled()) {
|
|
|
|
OssClient storage = OssFactory.instance();
|
|
|
|
OssClient storage = SERVICE_THREAD_LOCAL.get() == null ? OssFactory.instance() : OssFactory.instance(SERVICE_THREAD_LOCAL.get().name());
|
|
|
|
UploadResult uploadResult;
|
|
|
|
UploadResult uploadResult;
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
String path = "";
|
|
|
|
String path = "";
|
|
|
|
@ -229,7 +278,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
|
|
|
|
|
|
|
|
SysOssVo sysOssVo = new SysOssVo();
|
|
|
|
SysOssVo sysOssVo = new SysOssVo();
|
|
|
|
BeanCopyUtils.copy(oss, sysOssVo);
|
|
|
|
BeanCopyUtils.copy(oss, sysOssVo);
|
|
|
|
return this.matchingUrl(sysOssVo);
|
|
|
|
return this.url(sysOssVo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public SysOssVo uploadImgs(MultipartFile file, String pre) {
|
|
|
|
public SysOssVo uploadImgs(MultipartFile file, String pre) {
|
|
|
|
@ -245,7 +294,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
oss.setOriginalName(originalFileName);
|
|
|
|
oss.setOriginalName(originalFileName);
|
|
|
|
if (configService.selectOssEnabled()) {
|
|
|
|
if (configService.selectOssEnabled()) {
|
|
|
|
|
|
|
|
|
|
|
|
OssClient storage = OssFactory.instance();
|
|
|
|
OssClient storage = SERVICE_THREAD_LOCAL.get() == null ? OssFactory.instance() : OssFactory.instance(SERVICE_THREAD_LOCAL.get().name());
|
|
|
|
UploadResult uploadResult;
|
|
|
|
UploadResult uploadResult;
|
|
|
|
|
|
|
|
|
|
|
|
try (
|
|
|
|
try (
|
|
|
|
@ -288,7 +337,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SysOssVo sysOssVo = new SysOssVo();
|
|
|
|
SysOssVo sysOssVo = new SysOssVo();
|
|
|
|
BeanCopyUtils.copy(oss, sysOssVo);
|
|
|
|
BeanCopyUtils.copy(oss, sysOssVo);
|
|
|
|
return this.matchingUrl(sysOssVo);
|
|
|
|
return this.url(sysOssVo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
@ -308,22 +357,32 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
|
return baseMapper.deleteBatchIds(ids) > 0;
|
|
|
|
return baseMapper.deleteBatchIds(ids) > 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@Override
|
|
|
|
* 匹配Url
|
|
|
|
public SysOssVo url(SysOssVo oss, int second) {
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param oss OSS对象
|
|
|
|
|
|
|
|
* @return oss 匹配Url的OSS对象
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private SysOssVo matchingUrl(SysOssVo oss) {
|
|
|
|
|
|
|
|
if (UPLOAD.equals(oss.getService())) {
|
|
|
|
if (UPLOAD.equals(oss.getService())) {
|
|
|
|
return oss;
|
|
|
|
return oss;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
OssClient storage = OssFactory.instance(oss.getService());
|
|
|
|
OssClient storage = OssFactory.instance(oss.getService());
|
|
|
|
// 仅修改桶类型为 private 的URL,临时URL时长为120s
|
|
|
|
// 仅修改桶类型为 private 的URL,临时URL时长为120s
|
|
|
|
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
|
|
|
|
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
|
|
|
|
oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 120));
|
|
|
|
oss.setUrl(storage.getPrivateUrl(oss.getFileName(), second));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return oss;
|
|
|
|
return oss;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public String url(Service service, String url, int second) {
|
|
|
|
|
|
|
|
if (Service.upload.equals(service)) {
|
|
|
|
|
|
|
|
return url;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
OssClient storage = OssFactory.instance(service.name());
|
|
|
|
|
|
|
|
// 仅修改桶类型为 private 的URL,临时URL时长为120s
|
|
|
|
|
|
|
|
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
|
|
|
|
|
|
|
|
return storage.getPrivateUrl(url, second);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return url;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|