|
@@ -22,6 +22,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
import org.dromara.common.oss.core.OssClient;
|
|
import org.dromara.common.oss.core.OssClient;
|
|
|
import org.dromara.common.oss.entity.UploadResult;
|
|
import org.dromara.common.oss.entity.UploadResult;
|
|
|
import org.dromara.common.oss.enums.AccessPolicyType;
|
|
import org.dromara.common.oss.enums.AccessPolicyType;
|
|
|
|
|
+import org.dromara.common.oss.exception.OssException;
|
|
|
import org.dromara.common.oss.factory.OssFactory;
|
|
import org.dromara.common.oss.factory.OssFactory;
|
|
|
import org.dromara.system.domain.SysOss;
|
|
import org.dromara.system.domain.SysOss;
|
|
|
import org.dromara.system.domain.bo.SysOssBo;
|
|
import org.dromara.system.domain.bo.SysOssBo;
|
|
@@ -33,9 +34,12 @@ import org.springframework.cache.annotation.Cacheable;
|
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.http.MediaType;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
+import software.amazon.awssdk.core.exception.SdkClientException;
|
|
|
|
|
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
|
+import java.io.InputStream;
|
|
|
import java.time.Duration;
|
|
import java.time.Duration;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
@@ -252,6 +256,29 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SysOssVo uploadInputstream(MultipartFile file) {
|
|
|
|
|
+ String originalFilename = file.getOriginalFilename();
|
|
|
|
|
+ String suffix = StringUtils.substring(originalFilename, originalFilename.lastIndexOf("."));
|
|
|
|
|
+
|
|
|
|
|
+ OssClient storage = OssFactory.instance();
|
|
|
|
|
+
|
|
|
|
|
+ UploadResult uploadResult;
|
|
|
|
|
+ try (InputStream inputStream = file.getInputStream()) {
|
|
|
|
|
+ // ✅ 使用流式上传,避免 getBytes()
|
|
|
|
|
+ uploadResult = storage.uploadStream(
|
|
|
|
|
+ inputStream,
|
|
|
|
|
+ suffix,
|
|
|
|
|
+ file.getContentType(),
|
|
|
|
|
+ file.getSize() // 传大小,便于分片
|
|
|
|
|
+ );
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ throw new ServiceException("文件上传失败: " + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return buildResultEntity(originalFilename, suffix, storage.getConfigKey(), uploadResult);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 桶类型为 private 的URL 修改为临时URL时长为120s
|
|
* 桶类型为 private 的URL 修改为临时URL时长为120s
|
|
|
*
|
|
*
|