1、增加qiniu云存储; 2:重构config; 3: 重新命名

pull/84/head
duandazhi 4 years ago
parent 046c27d71c
commit fb028d7091

@ -119,6 +119,14 @@
<version>1.11.415</version> <version>1.11.415</version>
</dependency> </dependency>
<!--ceph upload end --> <!--ceph upload end -->
<!--七牛云文件存储 start -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.7.0, 7.7.99]</version>
</dependency>
<!--七牛云文件存储 end -->
</dependencies> </dependencies>
<build> <build>

@ -12,11 +12,11 @@ import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
*/ */
@EnableCustomSwagger2 @EnableCustomSwagger2
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class RuoYFileApplication public class RuoYiFileApplication
{ {
public static void main(String[] args) public static void main(String[] args)
{ {
SpringApplication.run(RuoYFileApplication.class, args); SpringApplication.run(RuoYiFileApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 文件服务模块启动成功 ლ(´ڡ`ლ)゙ \n" + System.out.println("(♥◠‿◠)ノ゙ 文件服务模块启动成功 ლ(´ڡ`ლ)゙ \n" +
" .-------. ____ __ \n" + " .-------. ____ __ \n" +
" | _ _ \\ \\ \\ / / \n" + " | _ _ \\ \\ \\ / / \n" +

@ -1,5 +1,6 @@
package com.ruoyi.file.config; package com.ruoyi.file.config;
import com.ruoyi.file.service.AliyunOssDsfServiceImpl;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -8,10 +9,12 @@ import org.springframework.context.annotation.Configuration;
* aliyun oss https://help.aliyun.com/learn/learningpath/oss.html ,需要购买 * aliyun oss https://help.aliyun.com/learn/learningpath/oss.html ,需要购买
* *
* @author dazer * @author dazer
*
* @see AliyunOssDsfServiceImpl
*/ */
@RefreshScope @RefreshScope
@Configuration @Configuration
@ConfigurationProperties(prefix = "aliyun.oss") @ConfigurationProperties(prefix = "aliyunoss")
public class AliyunOssConfig { public class AliyunOssConfig {
/** /**
* aliyun oss * aliyun oss
@ -20,11 +23,26 @@ public class AliyunOssConfig {
* AccessKeySecret eg:ap8nmIvD1TctcCLsADS4JbkOoXOluW * AccessKeySecret eg:ap8nmIvD1TctcCLsADS4JbkOoXOluW
* BucketName eg:yuebaoxiao * BucketName eg:yuebaoxiao
* Endpoint eg:oss-cn-shenzhen.aliyuncs.com * Endpoint eg:oss-cn-shenzhen.aliyuncs.com
*
* ak https://ak-console.aliyun.com/#/accesskey
*
*
*/
private String accessKeyId = "";
private String accessKeySecret = "";
private String bucketName = "";
private String endpoint = "";
/**
* hostHttps: https,
* https://oss.console.aliyun.com/bucket/oss-cn-shanghai/hiber2019/domain
* <p>
* 访
* 1访
* 2ip 访
* 3http; 访https
* 4: eg: https://image.jl-media.cn
*/ */
private String accessKeyId; private String domain = null;
private String accessKeySecret;
private String ossBucketName;
private String ossEndpoint;
public String getAccessKeyId() { public String getAccessKeyId() {
return accessKeyId; return accessKeyId;
@ -42,19 +60,27 @@ public class AliyunOssConfig {
this.accessKeySecret = accessKeySecret; this.accessKeySecret = accessKeySecret;
} }
public String getOssBucketName() { public String getBucketName() {
return ossBucketName; return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getEndpoint() {
return endpoint;
} }
public void setOssBucketName(String ossBucketName) { public void setEndpoint(String endpoint) {
this.ossBucketName = ossBucketName; this.endpoint = endpoint;
} }
public String getOssEndpoint() { public String getDomain() {
return ossEndpoint; return domain;
} }
public void setOssEndpoint(String ossEndpoint) { public void setDomain(String domain) {
this.ossEndpoint = ossEndpoint; this.domain = domain;
} }
} }

@ -0,0 +1,80 @@
package com.ruoyi.file.config;
import com.ruoyi.file.service.CephDfsServiceImpl;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* @see CephDfsServiceImpl
* @author dazer
*/
@RefreshScope
@Configuration
@ConfigurationProperties(
prefix = "ceph"
)
public class CephConfig {
/**
* s3 accessKey secretKey
*
* AccessKey: XPVF8TESA1X4SFU*****
* SecretKey: hBBEFpV3qsyI7HAdCBzA2ZdAhuANJFRIUz****
* BUCKET_NAME oss
* endpoint: 127.0.0.1 or oss-cn-shenzhen.aliyuncs.com
*/
private String accessKey = "";
private String secretKey = "";
private String endpoint = "127.0.0.1";
private String bucketName = "";
/**
* 访访
* 1 访
* 2ip; 访
* 3-1eg: https://dfwwbook.oss-cn-zhangjiakou.aliyuncs.com/upload/product/20210625165727777_dzdpl.jpg
* 3-2eg: https://dfwwbook.dfww.com.cn/upload/product/20210625165727777_dzdpl.jpg
* 4: domain https://dfwwbook.dfww.com.cn
*
*/
private String domain = null;
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
}

@ -0,0 +1,36 @@
package com.ruoyi.file.config;
import com.github.tobato.fastdfs.FdfsClientConstants;
import com.github.tobato.fastdfs.domain.conn.PooledConnectionFactory;
import com.ruoyi.file.service.FastDfsServiceImpl;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* fastdfs
* @author dazer
* @see FastDfsServiceImpl
* FastDFS {@link PooledConnectionFactory}
*/
@RefreshScope
@Configuration
@ConfigurationProperties(
prefix = FdfsClientConstants.ROOT_CONFIG_PREFIX
)
public class FastDfsConfig extends PooledConnectionFactory {
/**
* 访
* FastDFS {@link PooledConnectionFactory}
* //@Value("${fdfs.domain}")
*/
public String domain;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
}

@ -2,20 +2,36 @@ package com.ruoyi.file.config;
import java.io.File; import java.io.File;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/** /**
*
* *
* *
* @author ruoyi * @author ruoyi
*/ */
@RefreshScope @RefreshScope
@Configuration @Configuration
public class ResourcesConfig implements WebMvcConfigurer public class LocalConfig implements WebMvcConfigurer
{ {
/**
*
* eg: eg: /statics
*/
@Value("${file.prefix}")
private String localFilePrefix;
/**
* 访
* eg: http://127.0.0.1:9300
*/
@Value("${file.domain}")
private String domain;
/** /**
* *
* eg: D:/ruoyi/uploadPath * eg: D:/ruoyi/uploadPath
@ -23,13 +39,6 @@ public class ResourcesConfig implements WebMvcConfigurer
@Value("${file.path}") @Value("${file.path}")
private String localFilePath; private String localFilePath;
/**
*
* eg: /statics
*/
@Value("${file.prefix}")
public String localFilePrefix;
@Override @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) public void addResourceHandlers(ResourceHandlerRegistry registry)
{ {
@ -37,4 +46,28 @@ public class ResourcesConfig implements WebMvcConfigurer
registry.addResourceHandler(localFilePrefix + "/**") registry.addResourceHandler(localFilePrefix + "/**")
.addResourceLocations("file:" + localFilePath + File.separator); .addResourceLocations("file:" + localFilePath + File.separator);
} }
public String getLocalFilePrefix() {
return localFilePrefix;
}
public void setLocalFilePrefix(String localFilePrefix) {
this.localFilePrefix = localFilePrefix;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getLocalFilePath() {
return localFilePath;
}
public void setLocalFilePath(String localFilePath) {
this.localFilePath = localFilePath;
}
} }

@ -0,0 +1,73 @@
package com.ruoyi.file.config;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.ruoyi.file.service.QiniuDfsServiceImpl;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* kodo
* https://developer.qiniu.com/kodo/1239/java
* @author dazer
* @see UploadManager
* @see Region or endpoint
* @see com.qiniu.storage.Configuration
* @see QiniuDfsServiceImpl
*/
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "qiniu")
public class QiniuKodoConfig {
/**
* AccessKey ak
* =>https://portal.qiniu.com/user/key
* ak pRYrSe_EW4sJHsQ6JyuiRYShA2JCLKtMhT-N4TQD
* ===============================================
* SecretKey sk
* CwTEh1kSLBdxBhIWfFz6h1GgDSokx97CYEV0cC1O
* ===============================================
* bucketName https://portal.qiniu.com/kodo/bucket
* ===============================================
* domain 访
* ===============================================
* Region or endpoint:
*/
private String accessKey;
private String secretKey;
private String bucketName;
private String domain;
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
}

@ -1,5 +1,6 @@
package com.ruoyi.file.controller; package com.ruoyi.file.controller;
import com.ruoyi.file.service.IDfsService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -8,7 +9,6 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.file.FileUtils; import com.ruoyi.common.core.utils.file.FileUtils;
import com.ruoyi.file.service.ISysFileService;
import com.ruoyi.system.api.domain.SysFile; import com.ruoyi.system.api.domain.SysFile;
/** /**
@ -22,7 +22,7 @@ public class SysFileController
private static final Logger log = LoggerFactory.getLogger(SysFileController.class); private static final Logger log = LoggerFactory.getLogger(SysFileController.class);
@Autowired @Autowired
private ISysFileService sysFileService; private IDfsService sysFileService;
/** /**
* *

@ -12,7 +12,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -43,45 +42,10 @@ import java.util.concurrent.TimeUnit;
* //@see AliyunMsgUtil * //@see AliyunMsgUtil
*/ */
@Service @Service
public class AliyunOssFileServiceImpl implements ISysFileService { public class AliyunOssDsfServiceImpl implements IDfsService {
private static final Logger log = LoggerFactory.getLogger(AliyunOssFileServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(AliyunOssDsfServiceImpl.class);
@Autowired @Autowired
private AliyunOssConfig aliyunOssConfig; private AliyunOssConfig aliyunOssConfig;
/**
* 访id
*/
private String ACCESS_KEY_ID;
private String ACCESS_KEY_SECRET;
private String BUCKET_NAME;
/**
* https://oss.console.aliyun.com/
* oss
* <p>
* 访
*/
private String ENDPOINT = "oss-cn-shenzhen.aliyuncs.com";
private String ENDPOINT_INTERNAL = ENDPOINT.replace(".aliyuncs.com", "-internal.aliyuncs.com");
/**
*
* USER_DOMAIN_NAME: oss 访 null
* hostHttps: https,
* https://oss.console.aliyun.com/bucket/oss-cn-shanghai/hiber2019/domain
* <p>
* private static final String USER_DOMAIN_NAME = "image.jl-media.cn";
*/
private static final String USER_DOMAIN_NAME = null;
private static final boolean HOST_HTTPS = true;
@PostConstruct
public void init() {
ACCESS_KEY_ID = aliyunOssConfig.getAccessKeyId();
ACCESS_KEY_SECRET = aliyunOssConfig.getAccessKeySecret();
BUCKET_NAME = aliyunOssConfig.getOssBucketName();
ENDPOINT = aliyunOssConfig.getOssEndpoint();
ENDPOINT_INTERNAL = ENDPOINT.replace(".aliyuncs.com", "-internal.aliyuncs.com");
}
/** /**
* demo https://help.aliyun.com/learn/learningpath/oss.html * demo https://help.aliyun.com/learn/learningpath/oss.html
* <p> * <p>
@ -107,26 +71,31 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
requestKey = SpringUtil.getActiveProfile() + "/" + requestKey; requestKey = SpringUtil.getActiveProfile() + "/" + requestKey;
} }
/**
* https://oss.console.aliyun.com/
* oss
* <p>
* 访
*/
String endpoint = aliyunOssConfig.getEndpoint();
String endpointInternal = endpoint.replace(".aliyuncs.com", "-internal.aliyuncs.com");
long mb5 = 5 * 1024 * 1024L; long mb5 = 5 * 1024 * 1024L;
if (file.getSize() > mb5) { if (file.getSize() > mb5) {
//大于5mb,我们就分片上传 //大于5mb,我们就分片上传
this.ossUploadFileBigMultiable(isProd ? ENDPOINT_INTERNAL : ENDPOINT, requestKey, file); this.ossUploadFileBigMultiable(isProd ? endpointInternal : endpoint, requestKey, file);
} else { } else {
//否则,我们常规上传 //否则,我们常规上传
this.ossUploadFileSmall(isProd ? ENDPOINT_INTERNAL : ENDPOINT, requestKey, file); this.ossUploadFileSmall(isProd ? endpointInternal : endpoint, requestKey, file);
} }
// 解析结果 // 解析结果
// 注意,这里可能 需要 replace // 注意,这里可能 需要 replace
String accessPath; String accessPath;
if (StringUtils.isNotBlank(USER_DOMAIN_NAME)) { if (StringUtils.isNotBlank(aliyunOssConfig.getDomain())) {
if (HOST_HTTPS) { accessPath = aliyunOssConfig.getDomain() + "/" + requestKey;
accessPath = "https://" + USER_DOMAIN_NAME + "/" + requestKey;
} else {
accessPath = "http://" + USER_DOMAIN_NAME + "/" + requestKey;
}
} else { } else {
accessPath = "https://" + BUCKET_NAME + "." + ENDPOINT + "/" + requestKey; accessPath = "https://" + aliyunOssConfig.getBucketName() + "." + aliyunOssConfig.getEndpoint() + "/" + requestKey;
} }
return accessPath; return accessPath;
} }
@ -140,7 +109,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
/* /*
* Constructs a client instance with your account for accessing OSS * Constructs a client instance with your account for accessing OSS
*/ */
OSS client = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET); OSS client = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
String storePath = getStorePath(fileUrl); String storePath = getStorePath(fileUrl);
List<String> keys = new ArrayList<>(); List<String> keys = new ArrayList<>();
keys.add(storePath); keys.add(storePath);
@ -151,7 +120,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
*/ */
log.info("\nDeleting all objects:"); log.info("\nDeleting all objects:");
DeleteObjectsResult deleteObjectsResult = client.deleteObjects( DeleteObjectsResult deleteObjectsResult = client.deleteObjects(
new DeleteObjectsRequest(BUCKET_NAME).withKeys(keys)); new DeleteObjectsRequest(aliyunOssConfig.getBucketName()).withKeys(keys));
List<String> deletedObjects = deleteObjectsResult.getDeletedObjects(); List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
for (String object : deletedObjects) { for (String object : deletedObjects) {
log.info("\t" + object); log.info("\t" + object);
@ -185,10 +154,13 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
* @return upload/default/20190806202208849_jvs5g.png * @return upload/default/20190806202208849_jvs5g.png
*/ */
private String getStorePath(String filePath) { private String getStorePath(String filePath) {
String publicPath1 = "https://" + BUCKET_NAME + "." + ENDPOINT + "/"; String bucketName = aliyunOssConfig.getBucketName();
String publicPath2 = "http://" + BUCKET_NAME + "." + ENDPOINT + "/"; String endPoint = aliyunOssConfig.getEndpoint();
String publicPath3 = "https://" + USER_DOMAIN_NAME + "/"; String domain = aliyunOssConfig.getDomain();
String publicPath4 = "http://" + USER_DOMAIN_NAME + "/"; String publicPath1 = "https://" + bucketName + "." + endPoint + "/";
String publicPath2 = "http://" + bucketName + "." + endPoint + "/";
String publicPath3 = "https://" + domain + "/";
String publicPath4 = "http://" + domain + "/";
//String publicPath5 = ServletCacheUtils.getInstance().getHttpRootPath(); //String publicPath5 = ServletCacheUtils.getInstance().getHttpRootPath();
@ -209,11 +181,11 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
* demo https://github.com/aliyun/aliyun-oss-java-sdk/blob/master/src/samples/UploadSample.java * demo https://github.com/aliyun/aliyun-oss-java-sdk/blob/master/src/samples/UploadSample.java
*/ */
private String ossUploadFileSmall(String endpoint, String picturePath, MultipartFile file) throws IOException { private String ossUploadFileSmall(String endpoint, String picturePath, MultipartFile file) throws IOException {
OSS ossClient = new OSSClientBuilder().build(endpoint, ACCESS_KEY_ID, ACCESS_KEY_SECRET); OSS ossClient = new OSSClientBuilder().build(endpoint, aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
try { try {
// 上传文件 (上传文件流的形式) // 上传文件 (上传文件流的形式)
PutObjectResult putResult = ossClient.putObject(BUCKET_NAME, picturePath, file.getInputStream()); PutObjectResult putResult = ossClient.putObject(aliyunOssConfig.getBucketName(), picturePath, file.getInputStream());
} catch (OSSException oe) { } catch (OSSException oe) {
log.error("Caught an OSSException, which means your request made it to OSS, " log.error("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason."); + "but was rejected with an error response for some reason.");
@ -285,13 +257,13 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
*/ */
ClientBuilderConfiguration conf = new ClientBuilderConfiguration(); ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setIdleConnectionTime(1000); conf.setIdleConnectionTime(1000);
OSS client = new OSSClientBuilder().build(endpoint, ACCESS_KEY_ID, ACCESS_KEY_SECRET, conf); OSS client = new OSSClientBuilder().build(endpoint, aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret(), conf);
try { try {
/* /*
* Claim a upload id firstly * Claim a upload id firstly
*/ */
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(BUCKET_NAME, requestKey); InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(aliyunOssConfig.getBucketName(), requestKey);
InitiateMultipartUploadResult result = client.initiateMultipartUpload(request); InitiateMultipartUploadResult result = client.initiateMultipartUpload(request);
String uploadId = result.getUploadId(); String uploadId = result.getUploadId();
@ -366,7 +338,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
if (log.isInfoEnabled()) { if (log.isInfoEnabled()) {
log.info("Fetching an object"); log.info("Fetching an object");
} }
OSSObject ossObject = client.getObject(new GetObjectRequest(BUCKET_NAME, requestKey)); OSSObject ossObject = client.getObject(new GetObjectRequest(aliyunOssConfig.getBucketName(), requestKey));
if (log.isInfoEnabled()) { if (log.isInfoEnabled()) {
log.info(ossObject.getKey()); log.info(ossObject.getKey());
} }
@ -436,7 +408,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
instream.skip(this.startPos); instream.skip(this.startPos);
UploadPartRequest uploadPartRequest = new UploadPartRequest(); UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(BUCKET_NAME); uploadPartRequest.setBucketName(aliyunOssConfig.getBucketName());
uploadPartRequest.setKey(this.requestKey); uploadPartRequest.setKey(this.requestKey);
uploadPartRequest.setUploadId(this.uploadId); uploadPartRequest.setUploadId(this.uploadId);
uploadPartRequest.setInputStream(instream); uploadPartRequest.setInputStream(instream);
@ -474,7 +446,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
} }
CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(BUCKET_NAME, requestKey, uploadId, partETags); new CompleteMultipartUploadRequest(aliyunOssConfig.getBucketName(), requestKey, uploadId, partETags);
client.completeMultipartUpload(completeMultipartUploadRequest); client.completeMultipartUpload(completeMultipartUploadRequest);
} }
@ -482,7 +454,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
if (log.isInfoEnabled()) { if (log.isInfoEnabled()) {
log.info("Listing all parts......"); log.info("Listing all parts......");
} }
ListPartsRequest listPartsRequest = new ListPartsRequest(BUCKET_NAME, requestKey, uploadId); ListPartsRequest listPartsRequest = new ListPartsRequest(aliyunOssConfig.getBucketName(), requestKey, uploadId);
PartListing partListing = client.listParts(listPartsRequest); PartListing partListing = client.listParts(listPartsRequest);
int partCount = partListing.getParts().size(); int partCount = partListing.getParts().size();
@ -498,8 +470,8 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
} }
@Override @Override
public String listObject() { public String objectsCapacityStr() {
OSS client = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET); OSS client = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
final int maxKeys = 200; final int maxKeys = 200;
String nextMarker = null; String nextMarker = null;
ObjectListing objectListing; ObjectListing objectListing;
@ -509,7 +481,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
do do
{ {
objectListing = client.listObjects(new ListObjectsRequest(BUCKET_NAME).withMarker(nextMarker).withMaxKeys(maxKeys)); objectListing = client.listObjects(new ListObjectsRequest(aliyunOssConfig.getBucketName()).withMarker(nextMarker).withMaxKeys(maxKeys));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries(); List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) { for (OSSObjectSummary s : sums) {
@ -552,11 +524,11 @@ public class AliyunOssFileServiceImpl implements ISysFileService {
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
// 忽略 // 忽略
} }
OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET); OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
// 设置URL过期时间为12小时最大值就是43200 // 设置URL过期时间为12小时最大值就是43200
Date expiration = new Date(System.currentTimeMillis() + (43200 * 1000)); Date expiration = new Date(System.currentTimeMillis() + (43200 * 1000));
// 生成以GET方法访问的签名URL访客可以直接通过浏览器访问相关内容。 // 生成以GET方法访问的签名URL访客可以直接通过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(BUCKET_NAME, objectName, expiration); URL url = ossClient.generatePresignedUrl(aliyunOssConfig.getBucketName(), objectName, expiration);
// 关闭OSSClient。 // 关闭OSSClient。
ossClient.shutdown(); ossClient.shutdown();
return url.toString(); return url.toString();

@ -8,14 +8,16 @@ import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.*; import com.amazonaws.services.s3.model.*;
import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.file.utils.FileUploadUtils; import com.ruoyi.file.config.CephConfig;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import javax.annotation.PostConstruct;
/** /**
* @author dazer * @author dazer
@ -33,39 +35,25 @@ import java.io.IOException;
* 2:ceph使docker https://www.cnblogs.com/bladeyul/p/10649049.html * 2:ceph使docker https://www.cnblogs.com/bladeyul/p/10649049.html
* 3:使docker ceph 使aws sdk https://blog.csdn.net/freewebsys/article/details/79553386 * 3:使docker ceph 使aws sdk https://blog.csdn.net/freewebsys/article/details/79553386
*/ */
public class CephSysFileServiceImpl implements ISysFileService { @Service
private static final Logger log = LoggerFactory.getLogger(AliyunOssFileServiceImpl.class); public class CephDfsServiceImpl implements IDfsService {
private static final Logger log = LoggerFactory.getLogger(CephDfsServiceImpl.class);
@Autowired
private CephConfig cephConfig;
protected static AmazonS3 amazonS3 = null; protected static AmazonS3 amazonS3 = null;
/**
* s3 accessKey secretKey
* BUCKET_NAME oss
*/
private static String ACCESS_KEY = "XPVF8TESA1X4SFU*****";
private static String SECRET_KEY = "hBBEFpV3qsyI7HAdCBzA2ZdAhuANJFRIUz****";
private static String HOST = "127.0.0.1";
private static String BUCKET_NAME = "dfwwbook";
/**
*
* USER_DOMAIN_NAME: oss 访 null
* hostHttps: https,
* https://oss.console.aliyun.com/bucket/oss-cn-shanghai/hiber2019/domain
* <p>
* private static final String USER_DOMAIN_NAME = "image.jl-media.cn";
*/
private static final String USER_DOMAIN_NAME = null;
private static final boolean HOST_HTTPS = true;
/** /**
* ceph * ceph
*/ */
static { @PostConstruct
void init() {
log.info("开始初始化ceph配置"); log.info("开始初始化ceph配置");
AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); AWSCredentials credentials = new BasicAWSCredentials(cephConfig.getAccessKey(), cephConfig.getSecretKey());
ClientConfiguration clientConfiguration = new ClientConfiguration(); ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProtocol(Protocol.HTTP); clientConfiguration.setProtocol(Protocol.HTTP);
amazonS3 = new AmazonS3Client(credentials, clientConfiguration); amazonS3 = new AmazonS3Client(credentials, clientConfiguration);
amazonS3.setEndpoint(HOST); amazonS3.setEndpoint(cephConfig.getEndpoint());
log.info("ceph配置初始化成功"); log.info("ceph配置初始化成功");
} }
@ -109,20 +97,16 @@ public class CephSysFileServiceImpl implements ISysFileService {
// long mb5 = 5 * 1024 * 1024L; // long mb5 = 5 * 1024 * 1024L;
//大于5mb,我们就分片上传 //大于5mb,我们就分片上传
PutObjectResult result = amazonS3.putObject(BUCKET_NAME, requestKey, file.getInputStream(), new ObjectMetadata()); PutObjectResult result = amazonS3.putObject(cephConfig.getBucketName(), requestKey, file.getInputStream(), new ObjectMetadata());
// 上传成功 // 上传成功
if (result.isRequesterCharged()) { if (result.isRequesterCharged()) {
// 解析结果 // 解析结果
// 注意,这里可能 需要 replace // 注意,这里可能 需要 replace
String accessPath; String accessPath;
if (StringUtils.isNotBlank(USER_DOMAIN_NAME)) { if (StringUtils.isNotBlank(cephConfig.getDomain())) {
if (HOST_HTTPS) { accessPath = cephConfig.getDomain() + "/" + requestKey;
accessPath = "https://" + USER_DOMAIN_NAME + "/" + requestKey;
} else {
accessPath = "http://" + USER_DOMAIN_NAME + "/" + requestKey;
}
} else { } else {
accessPath = "https://" + BUCKET_NAME + "/" + requestKey; accessPath = "https://" + cephConfig.getBucketName() + "." + cephConfig.getEndpoint() + "/" + requestKey;
} }
return accessPath; return accessPath;
} }
@ -135,13 +119,13 @@ public class CephSysFileServiceImpl implements ISysFileService {
return false; return false;
} }
String storePath = getStorePath(fileUrl); String storePath = getStorePath(fileUrl);
amazonS3.deleteObject(BUCKET_NAME, storePath); amazonS3.deleteObject(cephConfig.getBucketName(), storePath);
return true; return true;
} }
@Override @Override
public String listObject() { public String objectsCapacityStr() {
return null; throw new CustomException("ceph-获取文件占用空间功能,敬请期待");
} }
/** /**
@ -151,17 +135,15 @@ public class CephSysFileServiceImpl implements ISysFileService {
* @return upload/default/20190806202208849_jvs5g.png * @return upload/default/20190806202208849_jvs5g.png
*/ */
private String getStorePath(String filePath) { private String getStorePath(String filePath) {
String publicPath1 = "https://" + BUCKET_NAME + "/"; String publicPath1 = "https://" + cephConfig.getBucketName() + "/";
String publicPath2 = "http://" + BUCKET_NAME + "/"; String publicPath2 = "http://" + cephConfig.getBucketName() + "/";
String publicPath3 = "https://" + USER_DOMAIN_NAME + "/"; String publicPath3 = "https://" + cephConfig.getDomain() + "/";
String publicPath4 = "http://" + USER_DOMAIN_NAME + "/"; String publicPath4 = "http://" + cephConfig.getDomain() + "/";
//String publicPath5 = ServletCacheUtils.getInstance().getHttpRootPath();
filePath = filePath.replace(publicPath1, ""); filePath = filePath.replace(publicPath1, "");
filePath = filePath.replace(publicPath2, ""); filePath = filePath.replace(publicPath2, "");
filePath = filePath.replace(publicPath3, ""); filePath = filePath.replace(publicPath3, "");
filePath = filePath.replace(publicPath4, ""); filePath = filePath.replace(publicPath4, "");
//filePath = filePath.replace(publicPath5, "");
return filePath; return filePath;
} }
} }

@ -1,13 +1,13 @@
package com.ruoyi.file.service; package com.ruoyi.file.service;
import com.github.tobato.fastdfs.domain.conn.PooledConnectionFactory;
import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException; import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException;
import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.file.config.FastDfsConfig;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.github.tobato.fastdfs.domain.fdfs.StorePath; import com.github.tobato.fastdfs.domain.fdfs.StorePath;
@ -16,20 +16,17 @@ import com.github.tobato.fastdfs.service.FastFileStorageClient;
/** /**
* FastDFS * FastDFS
* @author ruoyi * @author ruoyi
* @see FastDfsConfig
*/ */
@Service @Service
public class FastDfsSysFileServiceImpl implements ISysFileService public class FastDfsServiceImpl implements IDfsService
{ {
private final Logger logger = LoggerFactory.getLogger(FastDfsSysFileServiceImpl.class); private final Logger logger = LoggerFactory.getLogger(FastDfsServiceImpl.class);
/**
* 访
* FastDFS {@link PooledConnectionFactory}
*/
@Value("${fdfs.domain}")
public String domain;
@Autowired @Autowired
private FastFileStorageClient storageClient; private FastFileStorageClient storageClient;
@Autowired
private FastDfsConfig fastDfsConfig;
/** /**
* FastDfs * FastDfs
@ -53,7 +50,7 @@ public class FastDfsSysFileServiceImpl implements ISysFileService
FilenameUtils.getExtension(file.getOriginalFilename()), null); FilenameUtils.getExtension(file.getOriginalFilename()), null);
/// fileUrl = "http://127.0.0.1:22122/" + storePath.getFullPath(); /// fileUrl = "http://127.0.0.1:22122/" + storePath.getFullPath();
return domain + "/" + storePath.getFullPath(); return fastDfsConfig.getDomain() + "/" + storePath.getFullPath();
} }
@Override @Override
@ -72,7 +69,7 @@ public class FastDfsSysFileServiceImpl implements ISysFileService
} }
@Override @Override
public String listObject() { public String objectsCapacityStr() {
return null; throw new CustomException("fastdfs-获取文件占用空间功能,敬请期待");
} }
} }

@ -2,6 +2,7 @@ package com.ruoyi.file.service;
import cn.hutool.extra.ftp.Ftp; import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ftp.FtpMode; import cn.hutool.extra.ftp.FtpMode;
import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.file.config.FtpConfig; import com.ruoyi.file.config.FtpConfig;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -15,7 +16,7 @@ import java.io.IOException;
* @author dazer * @author dazer
*/ */
@Service @Service
public class FtpFileServiceImpl implements ISysFileService { public class FtpDfsServiceImpl implements IDfsService {
@Autowired @Autowired
private FtpConfig ftpConfig; private FtpConfig ftpConfig;
public static final String ACCESS_PREFIX = ""; public static final String ACCESS_PREFIX = "";
@ -62,8 +63,8 @@ public class FtpFileServiceImpl implements ISysFileService {
} }
@Override @Override
public String listObject() { public String objectsCapacityStr() {
return null; throw new CustomException("fpt-获取文件占用空间功能,敬请期待");
} }
private String getStorePath(String filePath) { private String getStorePath(String filePath) {

@ -4,11 +4,9 @@ import com.ruoyi.common.core.exception.file.FileNameLengthLimitExceededException
import com.ruoyi.common.core.exception.file.InvalidExtensionException; import com.ruoyi.common.core.exception.file.InvalidExtensionException;
import com.ruoyi.common.core.utils.file.MimeTypeUtils; import com.ruoyi.common.core.utils.file.MimeTypeUtils;
import com.ruoyi.file.utils.FileUploadUtils; import com.ruoyi.file.utils.FileUploadUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -17,6 +15,7 @@ import static com.ruoyi.file.utils.FileUploadUtils.assertAllowed;
import static com.ruoyi.file.utils.FileUploadUtils.extractFilename; import static com.ruoyi.file.utils.FileUploadUtils.extractFilename;
/** /**
* DFS = Distributed file system Sys File
* *
* 1: default: java * 1: default: java
* 2: ftp 使ftp iislinux ftpvsftpdFileZilla Server * 2: ftp 使ftp iislinux ftpvsftpdFileZilla Server
@ -26,7 +25,7 @@ import static com.ruoyi.file.utils.FileUploadUtils.extractFilename;
* 6: CEPH http://docs.ceph.org.cn/ * 6: CEPH http://docs.ceph.org.cn/
* @author ruoyi * @author ruoyi
*/ */
public interface ISysFileService public interface IDfsService
{ {
/** /**
* *
@ -63,7 +62,7 @@ public interface ISysFileService
* objectsCapacity * objectsCapacity
* @return eg: 100MB2G * @return eg: 100MB2G
*/ */
String listObject(); String objectsCapacityStr();
/** /**
* & & & * & & &

@ -1,7 +1,8 @@
package com.ruoyi.file.service; package com.ruoyi.file.service;
import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.file.config.LocalConfig;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -14,28 +15,13 @@ import com.ruoyi.file.utils.FileUploadUtils;
*/ */
@Primary @Primary
@Service @Service
public class LocalSysFileServiceImpl implements ISysFileService public class LocalDfsServiceImpl implements IDfsService
{ {
/** private final LocalConfig localConfig;
*
* eg: eg: /statics
*/
@Value("${file.prefix}")
public String localFilePrefix;
/**
* 访
* eg: http://127.0.0.1:9300
*/
@Value("${file.domain}")
public String domain;
/** public LocalDfsServiceImpl(LocalConfig localConfig) {
* this.localConfig = localConfig;
* eg: D:/ruoyi/uploadPath }
*/
@Value("${file.path}")
private String localFilePath;
/** /**
* *
@ -52,9 +38,12 @@ public class LocalSysFileServiceImpl implements ISysFileService
@Override @Override
public String uploadFile(MultipartFile file, String modules) throws Exception { public String uploadFile(MultipartFile file, String modules) throws Exception {
String localFilePath = localConfig.getLocalFilePath();
String domain = localConfig.getDomain();
String localFilePrefix = localConfig.getLocalFilePrefix();
String name = FileUploadUtils.upload(localFilePath + "/" + StringUtils.defaultString(modules, ""), file); String name = FileUploadUtils.upload(localFilePath + "/" + StringUtils.defaultString(modules, ""), file);
String url = domain + localFilePrefix + name; return domain + localFilePrefix + name;
return url;
} }
@Override @Override
@ -63,7 +52,7 @@ public class LocalSysFileServiceImpl implements ISysFileService
} }
@Override @Override
public String listObject() { public String objectsCapacityStr() {
return null; throw new CustomException("本地存储-获取文件占用空间功能,敬请期待");
} }
} }

@ -1,13 +1,13 @@
package com.ruoyi.file.service; package com.ruoyi.file.service;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.ruoyi.common.core.exception.CustomException;
import io.minio.RemoveObjectArgs; import io.minio.RemoveObjectArgs;
import io.minio.errors.*; import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.file.config.MinioConfig; import com.ruoyi.file.config.MinioConfig;
import com.ruoyi.file.utils.FileUploadUtils;
import io.minio.MinioClient; import io.minio.MinioClient;
import io.minio.PutObjectArgs; import io.minio.PutObjectArgs;
@ -21,7 +21,7 @@ import java.security.NoSuchAlgorithmException;
* @author ruoyi * @author ruoyi
*/ */
@Service @Service
public class MinioSysFileServiceImpl implements ISysFileService public class MinioDfsServiceImpl implements IDfsService
{ {
@Autowired @Autowired
private MinioConfig minioConfig; private MinioConfig minioConfig;
@ -84,7 +84,7 @@ public class MinioSysFileServiceImpl implements ISysFileService
} }
@Override @Override
public String listObject() { public String objectsCapacityStr() {
return null; throw new CustomException("minio存储-获取文件占用空间功能,敬请期待");
} }
} }

@ -0,0 +1,143 @@
package com.ruoyi.file.service;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.ruoyi.common.core.exception.CustomException;
import com.ruoyi.file.config.QiniuKodoConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
/**
* kodo
*
* @author dazer
* @see QiniuKodoConfig
* https://developer.qiniu.com/kodo/1239/java#upload-stream
* ==>JAVASDK==>==>
*/
@Service
public class QiniuDfsServiceImpl implements IDfsService {
private static final Logger log = LoggerFactory.getLogger(QiniuDfsServiceImpl.class);
@Autowired
private QiniuKodoConfig qiniuKodoConfig;
@Override
public String uploadFile(MultipartFile file) throws Exception {
return this.uploadFile(file, null);
}
@Override
public String uploadFile(MultipartFile file, String modules) throws Exception {
//key: 这里不能以/开头
String newName = validateModule(file, null);
//key: 这里不能以/开头
String requestKey = "upload/" + "/" + newName;
//这里增加一个前缀区分一下是测试环境还是正式环境
boolean isProd = "prod".equalsIgnoreCase(SpringUtil.getActiveProfile());
if (!isProd) {
requestKey = SpringUtil.getActiveProfile() + "/" + requestKey;
}
Configuration cfg = new Configuration(getCurrentRegion());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
String accessKey = qiniuKodoConfig.getAccessKey();
String secretKey = qiniuKodoConfig.getSecretKey();
String bucket = qiniuKodoConfig.getBucketName();
//默认不指定key的情况下以文件内容的hash值作为文件名
String key = requestKey;
InputStream byteInputStream = file.getInputStream();
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
String json = null;
try {
json = r.bodyString();
} catch (QiniuException e) {
log.error(e.getMessage());
}
log.error("【七牛云】-上传文件- 失败原因1" + r);
log.error("【七牛云】-上传文件-失败原因2" + json);
}
return null;
}
@Override
public boolean deleteFile(String fileUrl) {
Configuration cfg = new Configuration(getCurrentRegion());
//...其他参数参考类注释
String accessKey = qiniuKodoConfig.getAccessKey();
String secretKey = qiniuKodoConfig.getSecretKey();
String bucket = qiniuKodoConfig.getBucketName();
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);
String key = getStorePath(fileUrl);
try {
bucketManager.delete(bucket, key);
} catch (QiniuException ex) {
//如果遇到异常,说明删除失败
log.error("【七牛云】-删除文件-失败 code" + ex.code() + "=>" + ex.response.toString());
}
return false;
}
@Override
public String objectsCapacityStr() {
throw new CustomException("七牛云-获取文件占用空间功能,敬请期待");
}
/**
* url
*
* @param filePath http://guangdong-oss.ityun.ltd/upload/default/header.jpg
* @return upload/default/header.jpg
*
* http://qwc2geifw.hn-bkt.clouddn.com/upload/default/header.jpg
* ==> upload/default/header.jpg
*/
private String getStorePath(String filePath) {
String domain = qiniuKodoConfig.getDomain();
String publicPath3 = domain + "/";
filePath = filePath.replace(publicPath3, "");
return filePath;
}
/**
* https://developer.qiniu.com/kodo/1671/region-endpoint-fq
* new Region.Builder()
* https://developer.qiniu.com/kodo/1239/java#upload-stream
* : Region
* @return
*/
private Region getCurrentRegion() {
/// 其中关于Region对象和机房的关系如下
///Region region = Region.autoRegion();
///Region region = Region.region0();
//构造一个带指定 Region 对象的配置类
return Region.huadong();
}
}
Loading…
Cancel
Save