diff --git a/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java index d08ea21f5..0ee86ff05 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.iformall.interceptor.HttpServletRequestWrapperFilter; import com.iformall.interceptor.RequestInterceptor; +import com.iformall.service.MallResourceService; import com.iformall.ueditor.ActionEnter; import com.iformall.ueditor.ConfigManager; import com.iformall.ueditor.UEditorConfig; @@ -44,10 +45,13 @@ public class WebConfig implements WebMvcConfigurer { @Autowired private RequestInterceptor requestInterceptor; + @Autowired + private MallResourceService mallResourceService; + @Bean @ConditionalOnMissingBean(ActionEnter.class) public ActionEnter actionEnter() { - ActionEnter actionEnter = new ActionEnter(ConfigManager.getInstance(uEditorConfig, awsProperty)); + ActionEnter actionEnter = new ActionEnter(ConfigManager.getInstance(uEditorConfig, awsProperty, mallResourceService)); return actionEnter; } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/sys/UploadController.java b/mallinkAdmin/src/main/java/com/iformall/controller/sys/UploadController.java index 9d493d174..91bdd211a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/sys/UploadController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/sys/UploadController.java @@ -8,12 +8,12 @@ import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; -import com.amazonaws.services.s3.model.CannedAccessControlList; -import com.amazonaws.services.s3.model.ObjectMetadata; -import com.amazonaws.services.s3.model.PutObjectRequest; +import com.amazonaws.services.s3.model.*; import com.iformall.common.ResultData; import com.iformall.config.AwsProperty; import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.MallResource; +import com.iformall.service.MallResourceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -41,9 +41,12 @@ public class UploadController extends BaseController { @Autowired private AwsProperty awsProperty; + @Autowired + private MallResourceService mallResourceService; + private AmazonS3 s3 = null; - private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName) { + private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName, String tenantId) { ResultData data = new ResultData(); try { if(s3 == null) { @@ -69,6 +72,13 @@ public class UploadController extends BaseController { URL url = s3.getUrl(awsProperty.getBucketName(), fileName); logger.info(url.toString()); + MallResource mr = new MallResource(); + mr.setTenantId(tenantId); + mr.setBucket(awsProperty.getBucketName()); + mr.setS3Key(fileName); + mr.setUrl(url.toString()); + mallResourceService.saveOrUpdate(mr); + data.code = ResultData.SUCCESS; Map map = new HashMap<>(); map.put("url", url.toString()); @@ -128,7 +138,7 @@ public class UploadController extends BaseController { fileName = getTenantId() + "/" + fileName; } - ResultData data = awsUpload(multiReq, metadata, fileName); + ResultData data = awsUpload(multiReq, metadata, fileName, getTenantId()); return data; } @@ -167,7 +177,7 @@ public class UploadController extends BaseController { fileName = getTenantId() + "/" + fileName; } - ResultData data1 = awsUpload(multipartFile, metadata, fileName); + ResultData data1 = awsUpload(multipartFile, metadata, fileName, getTenantId()); if(data1.code == ResultData.SUCCESS) { Map _data = (Map)data1.data; map.put("url", (String) _data.get("url")); @@ -205,7 +215,7 @@ public class UploadController extends BaseController { String fileName = multiReq.getOriginalFilename(); fileName = "cimg/" + fileName; - ResultData data = awsUpload(multiReq, metadata, fileName); + ResultData data = awsUpload(multiReq, metadata, fileName, "cimg"); return data; } diff --git a/mallinkAdmin/src/main/java/com/iformall/ueditor/ActionEnter.java b/mallinkAdmin/src/main/java/com/iformall/ueditor/ActionEnter.java index be78d3668..a8ece41d2 100644 --- a/mallinkAdmin/src/main/java/com/iformall/ueditor/ActionEnter.java +++ b/mallinkAdmin/src/main/java/com/iformall/ueditor/ActionEnter.java @@ -69,7 +69,7 @@ public class ActionEnter { case ActionMap.UPLOAD_VIDEO: case ActionMap.UPLOAD_FILE: conf = this.configManager.getConfig(actionCode); - state = new Uploader(request, conf).doExec(); + state = new Uploader(request, conf, configManager.getMallResourceService()).doExec(); break; case ActionMap.CATCH_IMAGE: diff --git a/mallinkAdmin/src/main/java/com/iformall/ueditor/ConfigManager.java b/mallinkAdmin/src/main/java/com/iformall/ueditor/ConfigManager.java index 036c95c77..4b0246ea3 100644 --- a/mallinkAdmin/src/main/java/com/iformall/ueditor/ConfigManager.java +++ b/mallinkAdmin/src/main/java/com/iformall/ueditor/ConfigManager.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import com.iformall.config.AwsProperty; +import com.iformall.service.MallResourceService; import com.iformall.ueditor.define.ActionMap; import java.io.*; @@ -28,13 +29,15 @@ public final class ConfigManager { //配置信息 private UEditorConfig uEditorConfig; private AwsProperty awsProperty; + private MallResourceService mallResourceService; /* * 通过一个给定的路径构建一个配置管理器, 该管理器要求地址路径所在目录下必须存在config.properties文件 */ - private ConfigManager(UEditorConfig uEditorConfig, AwsProperty awsProperty) throws IOException { + private ConfigManager(UEditorConfig uEditorConfig, AwsProperty awsProperty, MallResourceService mallResourceService) throws IOException { this.uEditorConfig = uEditorConfig; this.awsProperty = awsProperty; + this.mallResourceService = mallResourceService; String configPath = uEditorConfig.getConfig(); configPath = configPath == null || configPath.isEmpty() ? configFileName : configPath; this.initEnv(configPath); @@ -46,10 +49,10 @@ public final class ConfigManager { * @param uEditorConfig 配置文件 * @return 配置管理器实例或者null */ - public static ConfigManager getInstance(UEditorConfig uEditorConfig, AwsProperty awsProperty) { + public static ConfigManager getInstance(UEditorConfig uEditorConfig, AwsProperty awsProperty, MallResourceService mallResourceService) { try { - return new ConfigManager(uEditorConfig, awsProperty); + return new ConfigManager(uEditorConfig, awsProperty, mallResourceService); } catch (Exception e) { System.err.println("UEditor ConfigManager load error~"); return null; @@ -57,6 +60,14 @@ public final class ConfigManager { } + public MallResourceService getMallResourceService() { + return mallResourceService; + } + + public void setMallResourceService(MallResourceService mallResourceService) { + this.mallResourceService = mallResourceService; + } + // 验证配置文件加载是否正确 public boolean valid() { return this.jsonConfig != null; diff --git a/mallinkAdmin/src/main/java/com/iformall/ueditor/upload/Uploader.java b/mallinkAdmin/src/main/java/com/iformall/ueditor/upload/Uploader.java index 1e6e33caf..08a21b654 100644 --- a/mallinkAdmin/src/main/java/com/iformall/ueditor/upload/Uploader.java +++ b/mallinkAdmin/src/main/java/com/iformall/ueditor/upload/Uploader.java @@ -12,6 +12,8 @@ import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; +import com.iformall.domain.po.MallResource; +import com.iformall.service.MallResourceService; import com.iformall.shiro.UserSession; import com.iformall.ueditor.define.BaseState; import com.iformall.ueditor.define.State; @@ -33,11 +35,13 @@ public class Uploader { private HttpServletRequest request = null; private Map conf = null; + private MallResourceService mallResourceService = null; private AmazonS3 s3 = null; - public Uploader(HttpServletRequest request, Map conf) { + public Uploader(HttpServletRequest request, Map conf, MallResourceService mallResourceService) { this.request = request; this.conf = conf; + this.mallResourceService = mallResourceService; this.s3 = AmazonS3ClientBuilder.standard() .withRegion(conf.get("clientRegion").toString()) .withCredentials(new AWSCredentialsProvider() { @@ -89,7 +93,15 @@ public class Uploader { .withCannedAcl(CannedAccessControlList.PublicRead)); URL url = s3.getUrl(conf.get("bucketName").toString(), fileName); //logger.info(url.toString()); + state.putInfo("url", url.toString()); + + MallResource mr = new MallResource(); + mr.setTenantId(tenantId); + mr.setBucket(conf.get("bucketName").toString()); + mr.setS3Key(fileName); + mr.setUrl(url.toString()); + mallResourceService.saveOrUpdate(mr); } catch (AmazonServiceException ase) { /* logger.warn("Caught an AmazonServiceException, which " + diff --git a/mallinkAdmin/src/main/resources/db/migration/V201905131552__S3_IMG_TABLE.sql b/mallinkAdmin/src/main/resources/db/migration/V201905131552__S3_IMG_TABLE.sql new file mode 100644 index 000000000..50f8a052b --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201905131552__S3_IMG_TABLE.sql @@ -0,0 +1,9 @@ +DROP TABLE IF EXISTS `mall_resource` ; +CREATE TABLE `mall_resource` ( + `id` bigint(64) NOT NULL, + `tenant_id` varchar(50) DEFAULT NULL COMMENT '租户ID', + `bucket` varchar(20) DEFAULT '' COMMENT 'bucket名称', + `s3_key` varchar(100) DEFAULT NULL COMMENT 's3 key', + `url` varchar(1024) DEFAULT NULL COMMENT 's3 url', + PRIMARY KEY (`id`) +) ENGINE=`InnoDB` ROW_FORMAT=DYNAMIC COMMENT='资源表' CHECKSUM=0 DELAY_KEY_WRITE=0; \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java b/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java index 0c9c8b3e5..0fdfcab0e 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/UploadController.java @@ -13,6 +13,8 @@ import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import com.iformall.common.ResultData; import com.iformall.config.AwsProperty; +import com.iformall.domain.po.MallResource; +import com.iformall.service.MallResourceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -38,9 +40,12 @@ public class UploadController extends BaseController { @Autowired private AwsProperty awsProperty; + @Autowired + private MallResourceService mallResourceService; + private AmazonS3 s3 = null; - private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName) { + private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName, String tenantId) { ResultData data = new ResultData(); try { if (s3 == null) { @@ -66,6 +71,13 @@ public class UploadController extends BaseController { URL url = s3.getUrl(awsProperty.getBucketName(), fileName); logger.info(url.toString()); + MallResource mr = new MallResource(); + mr.setTenantId(tenantId); + mr.setBucket(awsProperty.getBucketName()); + mr.setS3Key(fileName); + mr.setUrl(url.toString()); + mallResourceService.saveOrUpdate(mr); + data.code = ResultData.SUCCESS; Map map = new HashMap<>(); map.put("url", url.toString()); @@ -125,7 +137,7 @@ public class UploadController extends BaseController { fileName = getTenantId() + "/" + fileName; } - ResultData data = awsUpload(multiReq, metadata, fileName); + ResultData data = awsUpload(multiReq, metadata, fileName, getTenantId()); return data; } @@ -164,7 +176,7 @@ public class UploadController extends BaseController { fileName = getTenantId() + "/" + fileName; } - ResultData data1 = awsUpload(multipartFile, metadata, fileName); + ResultData data1 = awsUpload(multipartFile, metadata, fileName, getTenantId()); if (data1.code == ResultData.SUCCESS) { Map _data = (Map) data1.data; map.put("url", (String) _data.get("url")); @@ -183,27 +195,4 @@ public class UploadController extends BaseController { } return new ResultData(); } - - /** - * C端上传图片文件 - * - * @param multiReq - * @return - * @throws Exception - */ - @PostMapping(value = "/cimgUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data") - @ApiOperation("C端上传图片文件") - public ResultData cimgUpload(@RequestParam("file") MultipartFile multiReq) { - logger.info("[" + getIpAddr() + "] UploadController::cimgUpload"); - - ObjectMetadata metadata = new ObjectMetadata(); - metadata.setContentType(multiReq.getContentType()); - metadata.setContentLength(multiReq.getSize()); - - String fileName = multiReq.getOriginalFilename(); - fileName = "cimg/" + fileName; - ResultData data = awsUpload(multiReq, metadata, fileName); - return data; - } - } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/MallResource.java b/mallinkService/src/main/java/com/iformall/domain/po/MallResource.java new file mode 100644 index 000000000..2fc17a6dd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/MallResource.java @@ -0,0 +1,94 @@ +package com.iformall.domain.po; + +import lombok.Data; +import javax.persistence.*; +import java.util.*; +import java.math.*; +import javax.persistence.Transient; +import java.util.List; +import javax.persistence.Id; +import java.io.Serializable; + +@Table(name = "mall_resource") +@Data +public class MallResource implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + protected Long id; + + @Transient + protected List ids; + @Transient + protected String sortColumns; + + @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="bucket名称",name="bucket") + private String bucket; + @io.swagger.annotations.ApiModelProperty(value="s3 key",name="s3Key") + private String s3Key; + @io.swagger.annotations.ApiModelProperty(value="s3 url",name="url") + private String url; + + + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") + ,Bucket_ASC("`bucket` ASC"),Bucket_DESC("`bucket` DESC") + ,Key_ASC("`s3_key` ASC"),Key_DESC("`s3_key` DESC") + ,Url_ASC("`url` ASC"),Url_DESC("`url` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(MallResource.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + this.sortColumns = sb.toString(); + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/MallResourceMapper.java b/mallinkService/src/main/java/com/iformall/mapper/MallResourceMapper.java new file mode 100644 index 000000000..5b5e016e6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/MallResourceMapper.java @@ -0,0 +1,17 @@ +package com.iformall.mapper; + +import java.util.*; +import com.iformall.common.CommonMapper; +import org.apache.ibatis.annotations.Param; +import com.iformall.domain.po.MallResource; + +public interface MallResourceMapper extends CommonMapper { + + List findList(MallResource mallResource); + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/MallResourceService.java b/mallinkService/src/main/java/com/iformall/service/MallResourceService.java new file mode 100644 index 000000000..7043f265b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/MallResourceService.java @@ -0,0 +1,48 @@ +package com.iformall.service; + +import java.util.*; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.MallResource; + +public interface MallResourceService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(MallResource record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + MallResource getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(MallResource record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallResourceServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallResourceServiceImpl.java new file mode 100644 index 000000000..13283aa89 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallResourceServiceImpl.java @@ -0,0 +1,53 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.MallResource; +import com.iformall.mapper.MallResourceMapper; +import com.iformall.service.MallResourceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.iformall.common.IdWorker; + +@Service +public class MallResourceServiceImpl implements MallResourceService { + + @Autowired + MallResourceMapper mallResourceMapper; + + + @Override + public PageInfo listAsPage(MallResource record, Integer pageIndex, Integer pageSize) { + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> mallResourceMapper.findList(record)); + } + + @Override + public MallResource getById(Long id) { + return mallResourceMapper.selectByPrimaryKey(id); + } + + @Override + public void saveOrUpdate(MallResource record) { + if (record.getId() == null) { + //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + mallResourceMapper.insertSelective(record); + } else { + mallResourceMapper.updateByPrimaryKeySelective(record); + } + } + + @Override + public void deleteById(Long id) { + mallResourceMapper.deleteByPrimaryKey(id); + } + + + + + + + + +} diff --git a/mallinkService/src/main/resources/mapper/MallResourceMapper.xml b/mallinkService/src/main/resources/mapper/MallResourceMapper.xml new file mode 100644 index 000000000..e8aff24d6 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/MallResourceMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + `id`,`tenant_id`,`bucket`,`key`,`url` + + + + where 1 = 1 + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `bucket` = #{bucket} + + + and `s3_key` = #{s3Key} + + + and `url` = #{url} + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + diff --git a/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java b/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java index 9d493d174..84705e547 100644 --- a/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java +++ b/mallinkSysAdmin/src/main/java/com/iformall/controller/sys/UploadController.java @@ -14,6 +14,8 @@ import com.amazonaws.services.s3.model.PutObjectRequest; import com.iformall.common.ResultData; import com.iformall.config.AwsProperty; import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.MallResource; +import com.iformall.service.MallResourceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -41,9 +43,12 @@ public class UploadController extends BaseController { @Autowired private AwsProperty awsProperty; + @Autowired + private MallResourceService mallResourceService; + private AmazonS3 s3 = null; - private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName) { + private ResultData awsUpload(MultipartFile multiReq, ObjectMetadata metadata, String fileName, String tenantId) { ResultData data = new ResultData(); try { if(s3 == null) { @@ -69,6 +74,13 @@ public class UploadController extends BaseController { URL url = s3.getUrl(awsProperty.getBucketName(), fileName); logger.info(url.toString()); + MallResource mr = new MallResource(); + mr.setTenantId(tenantId); + mr.setBucket(awsProperty.getBucketName()); + mr.setKey(fileName); + mr.setUrl(url.toString()); + mallResourceService.saveOrUpdate(mr); + data.code = ResultData.SUCCESS; Map map = new HashMap<>(); map.put("url", url.toString()); @@ -128,7 +140,7 @@ public class UploadController extends BaseController { fileName = getTenantId() + "/" + fileName; } - ResultData data = awsUpload(multiReq, metadata, fileName); + ResultData data = awsUpload(multiReq, metadata, fileName, getTenantId()); return data; } @@ -167,7 +179,7 @@ public class UploadController extends BaseController { fileName = getTenantId() + "/" + fileName; } - ResultData data1 = awsUpload(multipartFile, metadata, fileName); + ResultData data1 = awsUpload(multipartFile, metadata, fileName, getTenantId()); if(data1.code == ResultData.SUCCESS) { Map _data = (Map)data1.data; map.put("url", (String) _data.get("url")); @@ -205,7 +217,7 @@ public class UploadController extends BaseController { String fileName = multiReq.getOriginalFilename(); fileName = "cimg/" + fileName; - ResultData data = awsUpload(multiReq, metadata, fileName); + ResultData data = awsUpload(multiReq, metadata, fileName, "cimg"); return data; }