diff --git a/pom.xml b/pom.xml index 9fc0b32b76ebbfe754353c914d60cadbe275d5be..6af011f608b2e1c5ffff6d18e3802de408421fca 100644 --- a/pom.xml +++ b/pom.xml @@ -187,7 +187,20 @@ mail 1.4.7 - + + + + com.qiniu + qiniu-java-sdk + [7.2.0, 7.2.99] + + + + + org.projectlombok + lombok + 1.18.6 + diff --git a/src/main/java/com/fc/test/common/base/BaseController.java b/src/main/java/com/fc/test/common/base/BaseController.java index dc67d5bb69f2af40bc5b7d69b386869da37eb488..8b67584a68a1d9830ce60bc8a287b32c68e4867a 100644 --- a/src/main/java/com/fc/test/common/base/BaseController.java +++ b/src/main/java/com/fc/test/common/base/BaseController.java @@ -5,14 +5,7 @@ import java.util.Date; import com.fc.test.common.domain.AjaxResult; import com.fc.test.model.custom.TitleVo; -import com.fc.test.service.SysDatasService; -import com.fc.test.service.SysFileDatasService; -import com.fc.test.service.SysFileService; -import com.fc.test.service.SysNoticeService; -import com.fc.test.service.SysOperLogService; -import com.fc.test.service.SysPermissionService; -import com.fc.test.service.SysRoleService; -import com.fc.test.service.SysUserService; +import com.fc.test.service.*; import com.fc.test.util.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; @@ -61,6 +54,10 @@ public class BaseController //公告 @Autowired public SysNoticeService sysNoticeService; + + /*文件上传云库*/ + @Autowired + private QiNiuCloudService qiNiuCloudService; /** * 将前台传递过来的日期格式的字符串,自动转化为Date类型 */ diff --git a/src/main/java/com/fc/test/common/exception/QiNiuException.java b/src/main/java/com/fc/test/common/exception/QiNiuException.java new file mode 100644 index 0000000000000000000000000000000000000000..59d7cd0215fc5ddad0438ae14da3b3f57faf5b03 --- /dev/null +++ b/src/main/java/com/fc/test/common/exception/QiNiuException.java @@ -0,0 +1,41 @@ +package com.fc.test.common.exception; + + +import com.fc.test.common.exception.enums.QiNiuErrorEnum; +import lombok.Data; + +/** + * QiNiuException + * + * @author bobbi + * @date 2018/10/07 13:54 + * @email 571002217@qq.com + * @description 自定义异常 + */ +@Data +public class QiNiuException extends RuntimeException{ + private String msg; + private int code = 500; + + public QiNiuException(){ + super(QiNiuErrorEnum.UNKNOWN.getMsg()); + this.msg= QiNiuErrorEnum.UNKNOWN.getMsg(); + } + + + public QiNiuException(QiNiuErrorEnum eEnum, Throwable e){ + super(eEnum.getMsg(),e); + this.msg=eEnum.getMsg(); + this.code=eEnum.getCode(); + } + + public QiNiuException(QiNiuErrorEnum eEnum){ + this.msg=eEnum.getMsg(); + this.code=eEnum.getCode(); + } + + public QiNiuException(String exception){ + this.msg=exception; + } + +} diff --git a/src/main/java/com/fc/test/common/exception/enums/QiNiuErrorEnum.java b/src/main/java/com/fc/test/common/exception/enums/QiNiuErrorEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..26538344b26a8c092d4e144ecf29c03ce818948e --- /dev/null +++ b/src/main/java/com/fc/test/common/exception/enums/QiNiuErrorEnum.java @@ -0,0 +1,33 @@ +package com.fc.test.common.exception.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * QiNiuErrorEnum + * @description error类型枚举类 + */ +@Getter +@AllArgsConstructor +public enum QiNiuErrorEnum { + + // 系统错误 + UNKNOWN(500,"系统内部错误,请联系管理员"), + PATH_NOT_FOUND(404,"路径不存在,请检查路径"), + NO_AUTH(403,"没有权限,请联系管理员"), + DUPLICATE_KEY(501,"数据库中已存在该记录"), + TOKEN_GENERATOR_ERROR(502,"token生成失败"), + NO_UUID(503,"uuid为空"), + SQL_ILLEGAL(504,"sql非法"), + + //用户权限错误 + INVALID_TOKEN(1001,"token不合法"), + + //七牛OSS错误 + OSS_CONFIG_ERROR(10050,"七牛配置信息错误"), + OSS_UPLOAD_ERROR(10051,"OSSBookNote上传失败"); + + private int code; + private String msg; + +} diff --git a/src/main/java/com/fc/test/controller/admin/QiNiuCloudController.java b/src/main/java/com/fc/test/controller/admin/QiNiuCloudController.java new file mode 100644 index 0000000000000000000000000000000000000000..c4d79687ddcd5af254fdfad16fc99fc7d5f286c4 --- /dev/null +++ b/src/main/java/com/fc/test/controller/admin/QiNiuCloudController.java @@ -0,0 +1,59 @@ +package com.fc.test.controller.admin; + +import com.fc.test.common.base.BaseController; +import com.fc.test.model.custom.TitleVo; +import com.fc.test.service.QiNiuCloudService; +import com.fc.test.util.QiNiuResult; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * @ClassName dell + * @Description TOOD + * @Author X + * @Data 2019/11/13 + * @Version 1.0 + **/ +@Controller +@RequestMapping("QiNiuCloudController") +public class QiNiuCloudController extends BaseController { + + @Autowired + private QiNiuCloudService qiNiuCloudService; + + //跳转页面参数 + private String prefix = "admin/fileCloud"; + + /** + * 文件上传云库展示页面 + * TODO(请说明这个方法的作用). + * @param model + * @return + */ + @GetMapping("/view") + @RequiresPermissions("system:file:view") + public String view(ModelMap model) + { + String str="图片上传云库"; + setTitle(model, new TitleVo("列表", str+"管理", true,"欢迎进入"+str+"页面", true, false)); + return prefix + "/list"; + } + + + @PostMapping("/uploadToQiNiu") + @ResponseBody + public QiNiuResult upload(@RequestParam("file")MultipartFile uploadFile){ + try { + return qiNiuCloudService.uploadToQiNiu(uploadFile); + } catch (IOException e){ + e.printStackTrace(); + return QiNiuResult.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/fc/test/service/QiNiuCloudService.java b/src/main/java/com/fc/test/service/QiNiuCloudService.java new file mode 100644 index 0000000000000000000000000000000000000000..2f506aa841e9838de77ec502adc8ff4b4998ea65 --- /dev/null +++ b/src/main/java/com/fc/test/service/QiNiuCloudService.java @@ -0,0 +1,66 @@ +package com.fc.test.service; + +import com.fc.test.util.QiNiuResult; +import com.google.gson.Gson; +import com.qiniu.http.Response; +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 org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.UUID; + +/** + * @ClassName dell + * @Description TOOD + * @Author X + * @Data 2019/11/13 + * @Version 1.0 + **/ +@Service +public class QiNiuCloudService { + + @Value("${oss.qiniu.accessKey}") + private String accessKey; + + @Value("${oss.qiniu.bucket}") + private String bucket; + + @Value("${oss.qiniu.secretKey}") + private String secretKey; + + @Value("${oss.qiniu.domain}") + private String domain; + + public QiNiuResult uploadToQiNiu(MultipartFile uploadFile) throws IOException { + + //构造一个带指定 Region 对象的配置类 + Configuration cfg = new Configuration(Region.huanan()); + //文件上传管理器 + UploadManager uploadManager = new UploadManager(cfg); + //生成上传凭证,然后准备上传 + Auth auth = Auth.create(accessKey, secretKey); + String upToken = auth.uploadToken(bucket); + //给图片重新设定名字 + String fileName = uploadFile.getOriginalFilename(); + String suffix = fileName.substring(fileName.lastIndexOf(".")); + String uuid = UUID.randomUUID().toString().toUpperCase().replace("-", ""); + fileName = uuid + suffix; + //默认不指定key的情况下,以文件内容的hash值作为文件名 + Response response = uploadManager.put(uploadFile.getBytes(), fileName, upToken); + //解析上传成功的结果 + DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); + // System.out.println(putRet.key); + //System.out.println(putRet.hash); + //成功 返回url name + QiNiuResult r = QiNiuResult.ok() + .put("url", domain + "/" + putRet.key) + .put("name", putRet.key); + return r; + } +} diff --git a/src/main/java/com/fc/test/util/QiNiuResult.java b/src/main/java/com/fc/test/util/QiNiuResult.java new file mode 100644 index 0000000000000000000000000000000000000000..ecfee9ef387779ee0f2c387ba60e510445a3bf80 --- /dev/null +++ b/src/main/java/com/fc/test/util/QiNiuResult.java @@ -0,0 +1,62 @@ +package com.fc.test.util; + +import com.fc.test.common.exception.enums.QiNiuErrorEnum; + +import java.util.HashMap; + +/** + * QiNiuResult + * + * @description 通用返回类 + */ +public class QiNiuResult extends HashMap { + + public QiNiuResult() { + put("code", 200); + put("msg", "success"); + } + + public static QiNiuResult ok() { + return new QiNiuResult(); + } + + public static QiNiuResult error() { + return error(QiNiuErrorEnum.UNKNOWN); + } + + public static QiNiuResult error(QiNiuErrorEnum eEnum) { + return new QiNiuResult().put("code", eEnum.getCode()).put("msg", eEnum.getMsg()); + } + + public static QiNiuResult error(String msg) { + return new QiNiuResult().put("msg",msg).put("code", QiNiuErrorEnum.UNKNOWN.getCode()); + } + + public static QiNiuResult error(Integer code , String msg){ + return new QiNiuResult().put("code",code).put("msg",msg); + } + + public static QiNiuResult exception() { + return exception(QiNiuErrorEnum.UNKNOWN); + } + + public static QiNiuResult exception(QiNiuErrorEnum eEnum) { + return new QiNiuResult().put("code", eEnum.getCode()).put("msg", eEnum.getMsg()); + } + + + + /** + * 封装业务数据 + * + * @param key + * @param value + * @return + */ + @Override + public QiNiuResult put(String key, Object value) { + super.put(key, value); + //将HashMap对象本身返回 + return this; + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 048672d04999896d8c1b9d13ef281508ee494676..240dd2582f3104e7cbf859d189cb61d91de6bbab 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -44,6 +44,7 @@ spring : wall: config: multi-statement-allow: true + #mysql 8.0 #spring : # datasource : diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 98a706373ec4fb2dc336807d9fd82319535aea39..08358689e3b7d1446f95f0c507f8fd2282122e30 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -81,4 +81,15 @@ pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true - params: count=countSql \ No newline at end of file + params: count=countSql + +# 七牛云配置 +# bucket是创建的存储空间名 +# domain对应存储空间的访问域名 +# accessKey,secretKey秘钥 +oss: + qiniu: + domain: + accessKey: + secretKey: + bucket: \ No newline at end of file diff --git a/src/main/resources/templates/admin/fileCloud/list.html b/src/main/resources/templates/admin/fileCloud/list.html new file mode 100644 index 0000000000000000000000000000000000000000..3780a983aaf27c3a2dcfc78f5a318a6f2c24cc79 --- /dev/null +++ b/src/main/resources/templates/admin/fileCloud/list.html @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ +
+ +
+ +
+
+
+
拖拽区域
+
+ + + +
+
+ + + +
+
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+ + + +
+
+
+
生成区域
+
+ + + +
+
+ + + +
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+ + +
+ +
+
+
+ + + + + +
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + +