diff --git a/litemall-all/src/test/java/org/linlinjava/litemall/allinone/AllinoneConfigTest.java b/litemall-all/src/test/java/org/linlinjava/litemall/allinone/AllinoneConfigTest.java index 8587ab94..f52724ea 100644 --- a/litemall-all/src/test/java/org/linlinjava/litemall/allinone/AllinoneConfigTest.java +++ b/litemall-all/src/test/java/org/linlinjava/litemall/allinone/AllinoneConfigTest.java @@ -22,11 +22,11 @@ public class AllinoneConfigTest { // 测试获取application-db.yml配置信息 System.out.println(environment.getProperty("spring.datasource.druid.url")); // 测试获取application-wx.yml配置信息 - System.out.println(environment.getProperty("wx.app-id")); + System.out.println(environment.getProperty("litemall.wx.app-id")); // 测试获取application-admin.yml配置信息 // System.out.println(environment.getProperty("")); // 测试获取application-os.yml配置信息 - System.out.println(environment.getProperty("org.linlinjava.litemall.os.address")); +// System.out.println(environment.getProperty("")); // 测试获取application.yml配置信息 System.out.println(environment.getProperty("logging.level.org.linlinjava.litemall.os")); System.out.println(environment.getProperty("logging.level.org.linlinjava.litemall.wx")); diff --git a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/config/ObjectStorageConfig.java b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/config/ObjectStorageConfig.java deleted file mode 100644 index 04e14a3e..00000000 --- a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/config/ObjectStorageConfig.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.linlinjava.litemall.os.config; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@ConfigurationProperties(prefix = "litemall.os") -public class ObjectStorageConfig { - private String address; - - private String port; - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - public String getPort() { - return port; - } - - public void setPort(String port) { - this.port = port; - } -} diff --git a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/AliyunOsService.java b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/AliyunOsService.java deleted file mode 100644 index f2045092..00000000 --- a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/AliyunOsService.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.linlinjava.litemall.os.service; - -import com.aliyun.oss.OSSClient; -import com.aliyun.oss.model.ObjectMetadata; -import com.aliyun.oss.model.PutObjectRequest; -import com.aliyun.oss.model.PutObjectResult; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.file.Path; -import java.util.stream.Stream; - -/** - * @author Yogeek - * @date 2018/7/16 16:10 - * @decrpt 阿里云对象存储服务 - */ -@PropertySource(value = "classpath:aliyun.properties") -@Service("aos") -public class AliyunOsService implements ObjectStorageService { - - @Value("${aliyun.os.ENDPOINT}") - private String ENDPOINT; - @Value("${aliyun.os.ACCESS_KEY_ID}") - private String ACCESS_KEY_ID; - @Value("${aliyun.os.ACCESS_KEY_SECRET}") - private String ACCESS_KEY_SECRET; - @Value("${aliyun.os.BUCKET_NAME}") - private String BUCKET_NAME; -// @Value("${aliyun.os.FOLDER}") -// private String FOLDER; - - /** - * 获取阿里云OSS客户端对象 - * - * @return ossClient - */ - private OSSClient getOSSClient(){ - return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET); - } - - private String getBaseUrl() { - return "https://" + BUCKET_NAME + "." + ENDPOINT + "/" ; - } - - /** - * 阿里云OSS对象存储简单上传实现 - */ - @Override - public void store(MultipartFile file, String keyName) { - try { - // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20M以下的文件使用该接口 - ObjectMetadata objectMetadata = new ObjectMetadata(); - objectMetadata.setContentLength(file.getSize()); - objectMetadata.setContentType(file.getContentType()); - // 对象键(Key)是对象在存储桶中的唯一标识。 - PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, keyName, file.getInputStream(), objectMetadata); - PutObjectResult putObjectResult = getOSSClient().putObject(putObjectRequest); - } catch (Exception ex) { - ex.printStackTrace(); - } - - } - - @Override - public Stream loadAll() { - return null; - } - - @Override - public Path load(String keyName) { - return null; - } - - @Override - public Resource loadAsResource(String keyName) { - try { - URL url = new URL(getBaseUrl() + keyName); - Resource resource = new UrlResource(url); - if (resource.exists() || resource.isReadable()) { - return resource; - } else { - return null; - } - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } - - @Override - public void delete(String keyName) { - try { - getOSSClient().deleteObject(BUCKET_NAME, keyName); - }catch (Exception e){ - e.printStackTrace(); - } - - } - - @Override - public String generateUrl(String keyName) { - return getBaseUrl() + keyName; - } -} diff --git a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/LocalOsService.java b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/LocalOsService.java deleted file mode 100644 index ebe2af6b..00000000 --- a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/LocalOsService.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.linlinjava.litemall.os.service; - - -import java.io.IOException; -import java.net.MalformedURLException; -import java.nio.file.*; -import java.util.stream.Stream; - -import org.linlinjava.litemall.os.config.ObjectStorageConfig; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -/** - * 服务器本地对象存储服务 - * - * 缩写los(local object storage) - */ -@Service("los") -public class LocalOsService implements ObjectStorageService { - - @Autowired - private ObjectStorageConfig osConfig; - private static final Path rootLocation = Paths.get("storage"); - - static { - try { - Files.createDirectories(rootLocation); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void store(MultipartFile file, String keyName) { - try { - Files.copy(file.getInputStream(), LocalOsService.rootLocation.resolve(keyName), StandardCopyOption.REPLACE_EXISTING); - } catch (IOException e) { - throw new RuntimeException("Failed to store file " + keyName, e); - } - } - - @Override - public Stream loadAll() { - try { - return Files.walk(LocalOsService.rootLocation, 1) - .filter(path -> !path.equals(LocalOsService.rootLocation)) - .map(path -> LocalOsService.rootLocation.relativize(path)); - } catch (IOException e) { - throw new RuntimeException("Failed to read stored files", e); - } - - } - - @Override - public Path load(String filename) { - return rootLocation.resolve(filename); - } - - @Override - public Resource loadAsResource(String filename) { - try { - Path file = load(filename); - Resource resource = new UrlResource(file.toUri()); - if (resource.exists() || resource.isReadable()) { - return resource; - } else { - return null; - } - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } - - @Override - public void delete(String filename) { - Path file = load(filename); - try { - Files.delete(file); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String generateUrl(String keyName) { - String url = osConfig.getAddress() + ":" + osConfig.getPort() + "/os/storage/fetch/" + keyName; - if (!url.startsWith("http")) { - url = "http://" + url; - } - return url; - } -} \ No newline at end of file diff --git a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/ObjectStorageService.java b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/ObjectStorageService.java deleted file mode 100644 index 6b2df45b..00000000 --- a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/ObjectStorageService.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.linlinjava.litemall.os.service; - -import org.springframework.core.io.Resource; -import org.springframework.web.multipart.MultipartFile; - -import java.io.InputStream; -import java.nio.file.Path; -import java.util.stream.Stream; - -/** - * 对象存储接口 - */ -public interface ObjectStorageService { - - /** - * 存储一个文件对象 - * @param file SpringBoot MultipartFile文件对象 - * @param keyName 文件索引名 - */ - void store(MultipartFile file, String keyName); - - Stream loadAll(); - - Path load(String keyName); - - Resource loadAsResource(String keyName); - - void delete(String keyName); - - String generateUrl(String keyName); -} \ No newline at end of file diff --git a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/TencentOsService.java b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/TencentOsService.java deleted file mode 100644 index eefce850..00000000 --- a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/service/TencentOsService.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.linlinjava.litemall.os.service; - -import com.qcloud.cos.COSClient; -import com.qcloud.cos.ClientConfig; -import com.qcloud.cos.auth.BasicCOSCredentials; -import com.qcloud.cos.auth.COSCredentials; -import com.qcloud.cos.model.ObjectMetadata; -import com.qcloud.cos.model.PutObjectRequest; -import com.qcloud.cos.model.PutObjectResult; -import com.qcloud.cos.region.Region; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.file.Path; -import java.util.stream.Stream; - -/** - * 腾讯对象存储服务 - * - * 注意:虽然腾讯对象存储英文缩写是cos(cloud object storage),但这里称之为tos(tencent object storage) - */ -@PropertySource(value = "classpath:tencent.properties") -@Service("tos") -public class TencentOsService implements ObjectStorageService { - - @Value("${tencent.os.secretId}") - private String accessKey; - @Value("${tencent.os.secretKey}") - private String secretKey; - @Value("${tencent.os.region}") - private String region; - @Value("${tencent.os.bucketName}") - private String bucketName; - - private COSClient cosClient; - - private COSClient getCOSClient() { - if (cosClient == null) { - // 1 初始化用户身份信息(secretId, secretKey) - COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey); - // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224 - ClientConfig clientConfig = new ClientConfig(new Region(region)); - cosClient = new COSClient(cred, clientConfig); - } - - return cosClient; - } - - private String getBaseUrl() { - return "https://" + bucketName + ".cos-website." + region + ".myqcloud.com/"; - } - - @Override - public void store(MultipartFile file, String keyName) { - try { - // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20M以下的文件使用该接口 - ObjectMetadata objectMetadata = new ObjectMetadata(); - objectMetadata.setContentLength(file.getSize()); - objectMetadata.setContentType(file.getContentType()); - // 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 `bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg` 中,对象键为 doc1/pic1.jpg, 详情参考 [对象键](https://cloud.tencent.com/document/product/436/13324) - PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, file.getInputStream(), objectMetadata); - PutObjectResult putObjectResult = getCOSClient().putObject(putObjectRequest); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - @Override - public Stream loadAll() { - return null; - } - - @Override - public Path load(String keyName) { - return null; - } - - @Override - public Resource loadAsResource(String keyName) { - try { - URL url = new URL(getBaseUrl() + keyName); - Resource resource = new UrlResource(url); - if (resource.exists() || resource.isReadable()) { - return resource; - } else { - return null; - } - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } - - @Override - public void delete(String keyName) { - try { - getCOSClient().deleteObject(bucketName, keyName); - }catch (Exception e){ - e.printStackTrace(); - } - - } - - @Override - public String generateUrl(String keyName) { - return getBaseUrl() + keyName; - } -} diff --git a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/web/OsStorageController.java b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/web/OsStorageController.java index 13a31105..c897d91d 100644 --- a/litemall-os-api/src/main/java/org/linlinjava/litemall/os/web/OsStorageController.java +++ b/litemall-os-api/src/main/java/org/linlinjava/litemall/os/web/OsStorageController.java @@ -1,10 +1,10 @@ package org.linlinjava.litemall.os.web; +import org.linlinjava.litemall.core.storage.StorageService; import org.linlinjava.litemall.core.util.CharUtil; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.LitemallStorage; import org.linlinjava.litemall.db.service.LitemallStorageService; -import org.linlinjava.litemall.os.service.ObjectStorageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; @@ -24,8 +24,8 @@ import java.util.Map; @RequestMapping("/os/storage") public class OsStorageController { - @javax.annotation.Resource(name="${activeStorage}") - private ObjectStorageService storageService; + @Autowired + private StorageService storageService; @Autowired private LitemallStorageService litemallStorageService; diff --git a/litemall-os-api/src/main/resources/aliyun.properties b/litemall-os-api/src/main/resources/aliyun.properties deleted file mode 100644 index 9e734940..00000000 --- a/litemall-os-api/src/main/resources/aliyun.properties +++ /dev/null @@ -1,6 +0,0 @@ -# 阿里云对象存储配置信息 -aliyun.os.ENDPOINT=oss-cn-shenzhen.aliyuncs.com -aliyun.os.ACCESS_KEY_ID= -aliyun.os.ACCESS_KEY_SECRET= -aliyun.os.BUCKET_NAME= -#aliyun.os.FOLDER="xxxxxx" \ No newline at end of file diff --git a/litemall-os-api/src/main/resources/application-os.yml b/litemall-os-api/src/main/resources/application-os.yml index de38d940..e69de29b 100644 --- a/litemall-os-api/src/main/resources/application-os.yml +++ b/litemall-os-api/src/main/resources/application-os.yml @@ -1,12 +0,0 @@ -# 当前存储模式 -# los,本地对象存储模式,上传图片保存在服务器中 -# tos,腾讯对象存储模式,上传图片保存在腾讯云存储服务器中,请在tencent.properties配置相关信息 -# tos,阿里云对象存储模式,上传图片保存在腾讯云存储服务器中,请在tencent.properties配置相关信息 -activeStorage: los -#activeStorage: tos -#activeStorage: aos - -# 开发者应该设置成自己的域名,必须附带http或者https -# 开发者可以查看OsStorageController.generateUrl -litemall.os.address: http://127.0.0.1 -litemall.os.port: 8081 \ No newline at end of file diff --git a/litemall-os-api/src/main/resources/tencent.properties b/litemall-os-api/src/main/resources/tencent.properties deleted file mode 100644 index 6d9052b6..00000000 --- a/litemall-os-api/src/main/resources/tencent.properties +++ /dev/null @@ -1,6 +0,0 @@ -# 腾讯对象存储配置信息 -# 请参考 https://cloud.tencent.com/document/product/436/6249 -tencent.os.secretId="xxxxxx" -tencent.os.secretKey="xxxxxx" -tencent.os.region="xxxxxx" -tencent.os.bucketName="xxxxxx" diff --git a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/AosTest.java b/litemall-os-api/src/test/java/org/linlinjava/litemall/os/AosTest.java deleted file mode 100644 index 6c490b4f..00000000 --- a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/AosTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.linlinjava.litemall.os; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.linlinjava.litemall.os.service.AliyunOsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.core.io.Resource; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.util.FileCopyUtils; - -import java.io.FileInputStream; -import java.io.IOException; - -@WebAppConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest -public class AosTest { - @Autowired - private AliyunOsService aliyunOsService; - - @Test - public void test() throws IOException { - String test = getClass().getClassLoader().getResource("litemall.png").getFile(); - byte[] content = (byte[])FileCopyUtils.copyToByteArray(new FileInputStream(test)); - MockMultipartFile mockMultipartFile = new MockMultipartFile("litemall.png", "litemall.png", "image/png", content); - aliyunOsService.store(mockMultipartFile, "aos.png"); - Resource resource = aliyunOsService.loadAsResource("aos.png"); - String url = aliyunOsService.generateUrl("aos.png"); - System.out.println("test file " + test); - System.out.println("store file " + resource.getURI()); - System.out.println("generate url " + url); - -// tencentOsService.delete("aos.png"); - } - -} \ No newline at end of file diff --git a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/LosTest.java b/litemall-os-api/src/test/java/org/linlinjava/litemall/os/LosTest.java deleted file mode 100644 index 002c90a2..00000000 --- a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/LosTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.linlinjava.litemall.os; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.linlinjava.litemall.os.service.LocalOsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.core.io.Resource; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.util.FileCopyUtils; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -@WebAppConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest -public class LosTest { - @Autowired - private LocalOsService localOsService; - - @Test - public void test() throws IOException { - String test = getClass().getClassLoader().getResource("litemall.png").getFile(); - byte[] content = (byte[])FileCopyUtils.copyToByteArray(new FileInputStream(test)); - MockMultipartFile mockMultipartFile = new MockMultipartFile("litemall.png", "litemall.png", "image/jpeg", content); - localOsService.store(mockMultipartFile, "los.png"); - Resource resource = localOsService.loadAsResource("los.png"); - String url = localOsService.generateUrl("los.png"); - System.out.println("test file " + test); - System.out.println("store file " + resource.getURI()); - System.out.println("generate url " + url); - -// localOsService.delete("los.png"); - - } - -} \ No newline at end of file diff --git a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/OsTest.java b/litemall-os-api/src/test/java/org/linlinjava/litemall/os/OsTest.java deleted file mode 100644 index 2f0e0077..00000000 --- a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/OsTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.linlinjava.litemall.os; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.core.env.Environment; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -@WebAppConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest -public class OsTest { - @Autowired - Environment environment; - - @Test - public void test() { - // 测试获取application-core.yml配置信息 - System.out.println(environment.getProperty("litemall.express.appId")); - // 测试获取application-db.yml配置信息 - System.out.println(environment.getProperty("spring.datasource.druid.url")); - // 测试获取application-os.yml配置信息 - System.out.println(environment.getProperty("litemall.os.address")); - // 测试获取application.yml配置信息 - System.out.println(environment.getProperty("logging.level.org.linlinjava.litemall.os")); - } - -} \ No newline at end of file diff --git a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/TosTest.java b/litemall-os-api/src/test/java/org/linlinjava/litemall/os/TosTest.java deleted file mode 100644 index c84d3d2e..00000000 --- a/litemall-os-api/src/test/java/org/linlinjava/litemall/os/TosTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.linlinjava.litemall.os; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.linlinjava.litemall.os.config.ObjectStorageConfig; -import org.linlinjava.litemall.os.service.TencentOsService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.core.io.Resource; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.util.FileCopyUtils; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; - -@WebAppConfiguration -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest -public class TosTest { - @Autowired - private TencentOsService tencentOsService; - - @Test - public void test() throws IOException { - String test = getClass().getClassLoader().getResource("litemall.png").getFile(); - byte[] content = (byte[])FileCopyUtils.copyToByteArray(new FileInputStream(test)); - MockMultipartFile mockMultipartFile = new MockMultipartFile("litemall.png", "litemall.png", "image/png", content); - tencentOsService.store(mockMultipartFile, "tos.png"); - Resource resource = tencentOsService.loadAsResource("tos.png"); - String url = tencentOsService.generateUrl("tos.png"); - System.out.println("test file " + test); - System.out.println("store file " + resource.getURI()); - System.out.println("generate url " + url); - -// tencentOsService.delete("tos.png"); - } - -} \ No newline at end of file diff --git a/litemall-os-api/src/test/resources/litemall.png b/litemall-os-api/src/test/resources/litemall.png deleted file mode 100644 index d16e9afa..00000000 Binary files a/litemall-os-api/src/test/resources/litemall.png and /dev/null differ