Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/bsd/cases/controller/CaseContentController.java
master
zyy 5 years ago
commit a9e44bf6af

@ -88,7 +88,7 @@
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.0</version>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
@ -240,6 +240,17 @@
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
<!--oss-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>

@ -0,0 +1,53 @@
package com.bsd.cases.conf;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "oss")
public class OssProperties {
//仓库名称
// @Value("${oss.bucket}")
public String bucket;
//地域节点
// @Value("${oss.endpoint}")
public String endpoint;
//AccessKey ID 阿里云AccessKey
// @Value("${oss.accessId}")
public String accessId ;
//Access Key Secret 阿里云Secret
// @Value("${oss.accessKey}")
public String accessKey;
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public String getAccessId() {
return accessId;
}
public void setAccessId(String accessId) {
this.accessId = accessId;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
}

@ -24,16 +24,25 @@
package com.bsd.cases.conf;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import javax.servlet.MultipartConfigElement;
/**
* @author
* @since 2015-12-19 16:16
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Value("${oss.maxFileSize}")
private String maxFileSize;
@Value("${oss.maxRequestSize}")
private String maxRequestSize;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
@ -43,4 +52,19 @@ public class WebMvcConfig extends WebMvcConfigurerAdapter {
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
*
*
* @return
*/
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
factory.setMaxFileSize(maxFileSize);
/// 总上传数据大小
factory.setMaxRequestSize(maxRequestSize);
return factory.createMultipartConfig();
}
}

@ -2,16 +2,23 @@ package com.bsd.cases.controller;
import com.alibaba.fastjson.JSONObject;
import com.bsd.cases.service.CaseCategoryService;
import com.bsd.cases.service.OssService;
import com.bsd.cases.util.AjaxRequest;
import com.bsd.cases.util.AjaxResult;
import com.bsd.cases.util.LogUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@CrossOrigin
@RestController
@ -20,6 +27,11 @@ public class CaseCategoryController {
@Resource
private CaseCategoryService caseCategoryService;
@Value("${oss.filedir}")
private String filedir;
private Logger logger = LogUtils.getBussinessLogger();
@Resource
private OssService ossService;
@RequestMapping("/get-all-category")
public AjaxResult getAllCategory(HttpServletRequest request) {
@ -170,4 +182,5 @@ public class CaseCategoryController {
}
return ajaxResult;
}
}

@ -2,15 +2,22 @@ package com.bsd.cases.controller;
import com.alibaba.fastjson.JSONObject;
import com.bsd.cases.service.CaseContentAttachmentService;
import com.bsd.cases.service.OssService;
import com.bsd.cases.util.AjaxRequest;
import com.bsd.cases.util.AjaxResult;
import com.bsd.cases.util.LogUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@CrossOrigin
@RestController
@ -19,6 +26,11 @@ public class CaseContentAttachmentController {
@Resource
private CaseContentAttachmentService caseContentAttachmentService;
@Value("${oss.filedir}")
private String filedir;
private Logger logger = LogUtils.getBussinessLogger();
@Resource
private OssService ossService;
@RequestMapping("/get-attachment-by-content-id")
public AjaxResult getCaseContentAttachment(@RequestBody AjaxRequest ajaxRequest, HttpServletRequest request) {
@ -39,4 +51,32 @@ public class CaseContentAttachmentController {
}
return ajaxResult;
}
/**
* @CK
* filesfilediross
* @return
*/
@RequestMapping(value = "/upload-attachment", produces = "text/html;charset=UTF-8")
public String uploadAttachment(MultipartFile file) {
Map<String, Object> value = new HashMap<>();
try {
if(file!=null){
//保存文件
JSONObject jsonObject = ossService.uploadAttachmentFile(file,filedir);
String url = jsonObject.getString("attachmentUrl");
logger.debug("图片路径{}",url);
value.put("code", 2000);
value.put("msg", "附件上传成功");
value.put("data",jsonObject);
}
} catch (Exception e) {
e.printStackTrace();
value.put("code", 2001);
value.put("msg", "附件上传失败");
}
return JSONObject.toJSONString(value);
}
}

@ -3,16 +3,22 @@ package com.bsd.cases.controller;
import com.alibaba.fastjson.JSONObject;
import com.bsd.cases.service.CaseContentLikeService;
import com.bsd.cases.service.CaseContentService;
import com.bsd.cases.service.OssService;
import com.bsd.cases.util.AjaxRequest;
import com.bsd.cases.util.AjaxResult;
import com.bsd.cases.util.LogUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
@CrossOrigin
@RestController
@ -24,6 +30,11 @@ public class CaseContentController {
@Resource
private CaseContentLikeService caseContentLikeService;
@Value("${oss.filedir}")
private String filedir;
private Logger logger = LogUtils.getBussinessLogger();
@Resource
private OssService ossService;
@RequestMapping("/get-content-list-by-category-id")
public AjaxResult getContentListByCategoryId(@RequestBody AjaxRequest ajaxRequest, HttpServletRequest request) {
@ -53,7 +64,7 @@ public class CaseContentController {
}
@RequestMapping("/get-content-detail-by-category-id")
public AjaxResult getContentDetailByContentId(@RequestBody AjaxRequest ajaxRequest, HttpServletRequest request) throws UnsupportedEncodingException {
public AjaxResult getContentDetailByContentId(@RequestBody AjaxRequest ajaxRequest, HttpServletRequest request) {
AjaxResult ajaxResult = new AjaxResult();
JSONObject data = ajaxRequest.getData();
if (null == data){
@ -196,4 +207,29 @@ public class CaseContentController {
}
return ajaxResult;
}
/**
* @CK
* filesfilediross
* @return
*/
@RequestMapping(value = "/upload-file", produces = "text/html;charset=UTF-8")
public String uploadFile(MultipartFile file) {
Map<String, Object> value = new HashMap<>();
try {
if(file!=null){
//保存文件
String url = ossService.uploadFile(file,filedir);
logger.debug("图片路径{}",url);
value.put("code", 2000);
value.put("msg", "图片上传成功");
value.put("url",url);
}
} catch (Exception e) {
e.printStackTrace();
value.put("code", 2001);
value.put("msg", "图片上传失败");
}
return JSONObject.toJSONString(value);
}
}

@ -0,0 +1,71 @@
package com.bsd.cases.service;
import com.alibaba.fastjson.JSONObject;
import com.bsd.cases.conf.OssProperties;
import com.bsd.cases.constants.Constants;
import com.bsd.cases.mapper.CaseCategoryMapper;
import com.bsd.cases.mapper.CaseContentAttachmentMapper;
import com.bsd.cases.model.CaseCategory;
import com.bsd.cases.model.CaseContentAttachment;
import com.bsd.cases.util.FileSizeUtils;
import com.bsd.cases.util.OSSClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.Date;
@Service
@Transactional
public class OssService {
@Autowired
OssProperties ossProperties;
@Resource
private CaseCategoryMapper caseCategoryMapper;
public JSONObject uploadAttachmentFile(MultipartFile file, String filedir) throws Exception {
if (file == null || file.getSize() <= 0) {
throw new Exception("file不能为空");
}
//文件名称
String realFileName = file.getOriginalFilename();
//文件前缀
String fileName = realFileName.substring(0,realFileName.indexOf("."));
//文件后缀
String suffix = realFileName.substring(realFileName.lastIndexOf(".") + 1);
//文件大小
Long len = file.getSize();
String size = FileSizeUtils.getPrintSize(len);
OSSClientUtil ossClient=new OSSClientUtil(ossProperties);
String name = ossClient.uploadImg2Oss(file,filedir);
String imgUrl = ossClient.getImgUrl(name,filedir);
String[] split = imgUrl.split("\\?");
JSONObject jsonObject = new JSONObject();
jsonObject.put("type",suffix);
jsonObject.put("size",size);
jsonObject.put("attachmentName",fileName);
jsonObject.put("attachmentUrl",split[0]);
return jsonObject;
}
public String uploadFile(MultipartFile file, String filedir) throws Exception {
if (file == null || file.getSize() <= 0) {
throw new Exception("file不能为空");
}
OSSClientUtil ossClient=new OSSClientUtil(ossProperties);
String name = ossClient.uploadImg2Oss(file,filedir);
String imgUrl = ossClient.getImgUrl(name,filedir);
String[] split = imgUrl.split("\\?");
return split[0];
}
// public JSONObject uploadContentMaterial(MultipartFile file, String filedir) throws Exception {
//
// }
}

@ -213,6 +213,7 @@ public class CaseContentServiceImpl extends BaseServiceImpl<CaseContentMapper, C
caseContent.setCategoryId(categoryId);
caseContent.setContent(content.getBytes());
caseContent.setUrl(url);
caseContent.setCreateDateTime(new Date());
caseContent.setUpdateDateTime(new Date());
caseContentMapper.insert(caseContent);
contentId = caseContent.getId();
@ -374,6 +375,13 @@ public class CaseContentServiceImpl extends BaseServiceImpl<CaseContentMapper, C
findCaseContentAttachment.setContentId(contentId);
List<CaseContentAttachment> caseContentAttachmentList = caseContentAttachmentMapper.select(findCaseContentAttachment);
caseContentDetailBakVo.setCaseContentAttachmentList(caseContentAttachmentList);
//level
CaseCategory findCaseCategory3 = caseCategoryMapper.selectByPrimaryKey(caseContent.getCategoryId());
CaseCategory findCaseCategory2 = caseCategoryMapper.selectByPrimaryKey(findCaseCategory3.getParentId());
caseContentDetailBakVo.setLevelId2(findCaseCategory2.getId());
CaseCategory findCaseCategory1 = caseCategoryMapper.selectByPrimaryKey(findCaseCategory2.getParentId());
caseContentDetailBakVo.setLevelId1(findCaseCategory1.getId());
return caseContentDetailBakVo;
}
}

@ -0,0 +1,39 @@
package com.bsd.cases.util;
public class FileSizeUtils {
/**
* B MB GB
* @param size
* @return
*/
public static String getPrintSize(Long size){
long rest = 0;
if(size < 1024){
return String.valueOf(size) + "B";
}else{
size /= 1024;
}
if(size < 1024){
return String.valueOf(size) + "KB";
}else{
rest = size % 1024;
size /= 1024;
}
if(size < 1024){
size = size * 100;
return String.valueOf((size / 100)) + "." + String.valueOf((rest * 100 / 1024 % 100)) + "MB";
}else{
size = size * 100 / 1024;
return String.valueOf((size / 100)) + "." + String.valueOf((size % 100)) + "GB";
}
}
public static void main(String[] args){
System.out.println(getPrintSize(120005171L));
System.out.println(getPrintSize(15522272L));
System.out.println(getPrintSize(123456L));
System.out.println(getPrintSize(12012L));
System.out.println(getPrintSize(1021L));
}
}

@ -0,0 +1,198 @@
package com.bsd.cases.util;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.bsd.cases.conf.OssProperties;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.net.URL;
import java.util.Date;
@Component
public class OSSClientUtil {
private static final Logger logger = LoggerFactory.getLogger(OSSClientUtil.class);
//仓库名称
public String bucket;
//地域节点
public String endpoint;
//AccessKey ID 阿里云AccessKey
public String accessId ;
//Access Key Secret 阿里云Secret
public String accessKey;
private OSSClient ossClient;
private OssProperties ossProperties;
public OSSClientUtil(OssProperties ossProperties) {
this.ossProperties = ossProperties;
bucket = ossProperties.bucket;
endpoint = ossProperties.endpoint;
accessKey = ossProperties.accessKey;
accessId = ossProperties.accessId;
ossClient = new OSSClient(endpoint, accessId, accessKey);
}
/**
*
*/
// @PostConstruct
public void init() {
ossClient = new OSSClient(endpoint, accessId, accessKey);
}
/**
*
*/
public void destory() {
ossClient.shutdown();
}
/**
*
*
* @param url
* @throws Exception
*/
public void uploadImg2Oss(String url,String filedir) throws Exception {
File fileOnServer = new File(url);
FileInputStream fin;
try {
fin = new FileInputStream(fileOnServer);
String[] split = url.split("/");
this.uploadFile2OSS(fin, split[split.length - 1],filedir);
} catch (FileNotFoundException e) {
throw new Exception("图片上传失败");
}
}
public String uploadImg2Oss(MultipartFile file, String filedir) throws Exception {
if (file.getSize() > 10 * 1024 * 1024) {
throw new Exception("上传图片大小不能超过10M");
}
String originalFilename = file.getOriginalFilename();
// String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
// Random random = new Random();
String name = originalFilename;
try {
InputStream inputStream = file.getInputStream();
this.uploadFile2OSS(inputStream, name,filedir);
return name;
} catch (Exception e) {
throw new Exception("图片上传失败");
}
}
/**
*
*
* @param fileUrl
* @return
*/
public String getImgUrl(String fileUrl,String filedir) {
System.out.println(fileUrl);
if (!StringUtils.isEmpty(fileUrl)) {
String[] split = fileUrl.split("/");
return this.getUrl(filedir + split[split.length - 1]);
}
return null;
}
/**
* OSS
*
* @param instream
* @param fileName
* @return "" ,MD5
*/
public String uploadFile2OSS(InputStream instream, String fileName,String filedir) {
String ret = "";
try {
// 创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(instream.available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
objectMetadata.setContentDisposition("inline;filename=" + fileName);
// 上传文件
PutObjectResult putResult = ossClient.putObject(bucket, filedir + fileName, instream, objectMetadata);
ret = putResult.getETag();
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
try {
if (instream != null) {
instream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return ret;
}
/**
* Description: OSScontentType
*
* @param filenameExtension
* @return String
*/
public static String getcontentType(String filenameExtension) {
if (filenameExtension.equalsIgnoreCase("bmp")) {
return "image/bmp";
}
if (filenameExtension.equalsIgnoreCase("gif")) {
return "image/gif";
}
if (filenameExtension.equalsIgnoreCase("jpeg") || filenameExtension.equalsIgnoreCase("jpg")
|| filenameExtension.equalsIgnoreCase("png")) {
return "image/jpeg";
}
if (filenameExtension.equalsIgnoreCase("html")) {
return "text/html";
}
if (filenameExtension.equalsIgnoreCase("txt")) {
return "text/plain";
}
if (filenameExtension.equalsIgnoreCase("vsd")) {
return "application/vnd.visio";
}
if (filenameExtension.equalsIgnoreCase("pptx") || filenameExtension.equalsIgnoreCase("ppt")) {
return "application/vnd.ms-powerpoint";
}
if (filenameExtension.equalsIgnoreCase("docx") || filenameExtension.equalsIgnoreCase("doc")) {
return "application/msword";
}
if (filenameExtension.equalsIgnoreCase("xml")) {
return "text/xml";
}
return "image/jpeg";
}
/**
* url
*
* @param key
* @return
*/
public String getUrl(String key) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
URL url = ossClient.generatePresignedUrl(bucket, key, expiration);
if (url != null) {
return url.toString();
}
return null;
}
}

@ -15,4 +15,8 @@ public class CaseContentDetailBakVo extends CaseContent {
private List<CaseContentMaterial> caseContentMaterialList;
private List<CaseContentAttachment> caseContentAttachmentList;
private Long levelId1;
private Long levelId2;
}

@ -59,3 +59,11 @@ wx:
SIGNUP_TEMPLATE_ID: wqbPcPHkoThymDu51V1ib2FxI6kC5VFOES0mXJy4nDc
CANCEL_TEMPLATE_ID: MZGrdIYaXSIgJtZqf1Li_oh3IbqiAFqXWR-iUOhcg1c
CHANGE_TEMPLATE_ID: PVuWhUHeKuX-DeqtXDOaccJJht89JKartyqhsh_sHTk
oss:
bucket: dj-databackup
endpoint: oss-cn-zhangjiakou.aliyuncs.com
accessId: LTAIhZASeqbsyQXm
accessKey: 8xROCAL9xwJdyItKGW2saI7yCg1G25
maxFileSize: 10240KB
maxRequestSize: 102400KB
filedir: cktest/
Loading…
Cancel
Save