41 Commits
Author SHA1 Message Date
hello-hao 3fce125334 📝 2023-05-23 10:04:38 +08:00
hello-hao 062823ae53 feat:支持查询图像,自动检测新版本 2023-05-19 18:58:57 +08:00
hello-hao 349845e6f1 📝 2023-05-19 18:50:25 +08:00
hello-hao f40f4177f7 📝 2023-05-19 18:41:58 +08:00
hello-hao 17c49157c2 📝 2023-05-19 18:39:22 +08:00
hello-hao e9d1d2205e 📝 2023-04-19 17:42:04 +08:00
hello-hao 422cfbb724 Merge remote-tracking branch 'origin/master' 2023-04-19 17:40:44 +08:00
hello-hao e65b79ab33 📝 2023-04-19 17:39:53 +08:00
hellohao 4e1bc1fc84 修改创建文件夹方法 2023-04-09 20:45:31 +08:00
hello-hao 96b323e1e9 feat:新增可通过图像名称查询 2023-04-07 17:44:50 +08:00
hello-hao 64bc91247c 📝 2023-04-07 09:39:47 +08:00
hello-hao d2f1d75413 📝 2023-04-07 09:38:10 +08:00
hello-hao be8e51cd47 📝 2023-04-07 09:35:58 +08:00
hello-hao 1d0337f725 update:重构部分上传接口逻辑 2023-04-06 17:44:17 +08:00
hello-hao f8d082e8bf 📝 2023-04-03 13:55:06 +08:00
hello-hao b6c2dee9e5 :art:updata:修正了一些细节问题,去除无用类 2023-03-24 19:01:58 +08:00
hello-hao 603e94bdb1 📝 2023-03-23 17:35:21 +08:00
hello-hao 646a181d03 📝 2023-03-23 17:33:21 +08:00
hellohao c6c5cad4fc 更新文档 2023-03-21 23:50:00 +08:00
hellohao 44b527dabd Revert "更新文档"
This reverts commit dd11dd2589.
2023-03-21 23:49:31 +08:00
hellohao dd11dd2589 更新文档 2023-03-21 23:48:35 +08:00
hello-hao c2b4527c48 :rocket:优化代码 2023-03-21 21:30:09 +08:00
hello-hao 57b6c4ae72 Merge remote-tracking branch 'origin/hellohao-dev'
# Conflicts:
#	src/main/java/cn/hellohao/service/impl/InitializationStorage.java
2023-03-21 21:25:04 +08:00
hello-hao 733ec3e6f9 :rocket:修改配置文件,支持Docker部署 2023-03-21 21:15:31 +08:00
hello-hao c3e91f3593 :rocket:优化代码 2023-03-20 18:06:00 +08:00
hello-hao 8ebdbf6cee update:调整数据类型,删除逻辑
feat:sout在log文件中显示
2023-03-17 17:41:10 +08:00
hello-hao 393ad3138e update:调整了百度鉴别接口升级了依赖,新增了key的相关字段信息 2023-03-16 17:38:01 +08:00
hello-hao 6f6166275a feat:新增对接S3协议
style:调整日志框架
docs:调整了文档
2023-03-15 17:35:04 +08:00
hello-hao cc05712906 :rocket:修改存储源 2023-03-15 10:20:55 +08:00
hello-hao 538482a73b :rocket:删除部分无用代码 2023-03-10 19:45:48 +08:00
hello-hao e61b7ce10d 📝 修改文件 2023-03-05 23:08:17 +08:00
hello-hao 1408b9c029 📝 修改文件 2023-03-05 14:28:34 +08:00
hello-hao f56bc84d29 :art:修改系统配置表数据结构,添加数据库连接检测 2023-03-03 18:59:12 +08:00
hello-hao f8a712e601 📝 2023-02-28 17:44:28 +08:00
hello-hao 4ca9159956 📝 修改文件 2023-01-01 23:27:08 +08:00
hello-hao 2048660b64 :rocket:修复筛选出现重复,记录图片原始名称等多个问题 2023-01-01 23:20:37 +08:00
hello-hao 2ee49dcae2 :art:完善部分新功能 2022-11-21 19:03:58 +08:00
hello-hao b978f33aba 📝 2022-11-20 22:29:04 +08:00
hello-hao d8bb6c1738 :art:完善部分新功能 2022-11-19 16:49:23 +08:00
hellohao e1018bde75 📝 2022-10-26 21:55:21 +08:00
hellohao 8c8e44f82c :rocket:优化验证码失效等问题 2022-10-26 21:51:25 +08:00
74 changed files with 2798 additions and 2566 deletions
+93 -57
View File
@@ -7,10 +7,12 @@
![https://img.shields.io/badge/license-AGPL-blue.svg?style=flat-square](https://img.shields.io/badge/license-AGPL-blue.svg?longCache=true&style=flat-square)
![https://img.shields.io/badge/language-java-orange.svg?style=flat-square](https://img.shields.io/badge/language-java-yellow.svg?longCache=true&style=popout-square)
>:exclamation: 托管的所有开源代码可能存在作者修改/测试/调整等行为,均为实验性代码,故并不保证程序或功能的可用性,如果你想要部署程序,请下载我们提供的编译整合包进行安装部署。
### 引导
[官网](https://tbed.hellohao.cn) | [宣传视频](https://www.bilibili.com/video/BV11r4y1y7mH/) | [文档](https://doc.hellohao.cn) | [演示站](https://pic.hellohao.cn) | [前端源码](https://github.com/Hello-hao/tbed-web) | [客户端程序](https://tbed.hellohao.cn/app)
[官网](https://tbed.hellohao.cn) | [论坛](http://bbs.hellohao.cn) | [文档](https://doc.hellohao.cn) | [演示站](https://pic.hellohao.cn) | [桌面客户端](https://tbed.hellohao.cn/app) | [前端源码](https://github.com/Hello-hao/tbed-web)
### 前言
@@ -21,41 +23,20 @@
**存储源支持:**
开源版:`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,~~`U-File`~~,`FTP`
开源版:`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,~~`U-File`~~,`FTP`,`AWS S3协议`(`百度云BOS`,`青云Qingstor`,`Ucloud US3`,`Minio`等兼容S3协议)
Core版`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,~~`U-File`~~,`FTP`,`Backblaze(B2)`,`百度云BOS`,`青云Qingstor`,`Ucloud US3`,`Minio`,`AWS S3`等通用S3协议
[Core版](https://hellohao.cn):开源版的基础上增加`Backblaze(B2)` 并且可同个对象存储商家可开多个存储源(可添加至90+存储源)
### 更新日志 `20230519`
### 更新日志 `20220901`
- `增加`图片名称显示/编辑功能(为后续图像精准搜索打基础)
- `增加`数据库命名检测(数据库名称必须为:tbed)
- `调整`站点设置表单的部分字段字符数限制
- `调整`页面部分表单的文字显示
[^_^]:程序宣传视频:[自制宣传视频](https://www.bilibili.com/video/BV11r4y1y7mH/)
[^_^]:官网(含Core版)[https://tbed.hellohao.cn](https://tbed.hellohao.cn)
[^_^]:前端源码:[https://github.com/Hello-hao/tbed-web](https://github.com/Hello-hao/tbed-web)
[^_^]:文档地址:[https://doc.hellohao.cn](https://doc.hellohao.cn)
[^_^]:程序展示:[https://tc.hellohao.cn](https://tc.hellohao.cn)
[^_^]:作者博客:[https://www.hellohao.cn](https://www.hellohao.cn)
[^_^]:官网(含Core版)(备用)[http://tbed.wwery.com](http://tbed.wwery.com)
[^_^]:文档地址(备用)[http://doc.wwery.com](http://doc.wwery.com)
[^_^]:程序展示(备用)[http://tc.wwery.com](http://tc.wwery.com)
[^_^]:作者博客(备用)[http://www.wwery.com](http://www.wwery.com)
- 优化了上传页面的上传逻辑
- 添加了自动检测新版本
- 新增了图像搜索功能,可通过名称/链接进行模糊查询
- 修复多个页面问题
[^_^]: 程序宣传视频:[自制宣传视频](https://www.bilibili.com/video/BV11r4y1y7mH/)
### 主要功能
@@ -100,11 +81,79 @@ Core版:`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,
- [x] 图像直链二维码生成
### 快速开始
**Docker-compose部署:**
1. 创建`docker-compose.yml`文件
> 在服务器的任意目录创建的文件夹中创建`docker-compose.yml`文件,内容如下:
>
> (修改下方前`端域名`,`后端域名`,`数据库密码`等注释的信息,特别要注意文件格式缩进不可以乱改)
```yml
version: "3"
services:
tbed-free:
# 具体版本号需要填写目前发行的最新版本
image: hellohao/tbed-free:2023xxxx
networks:
hellohao_network:
ports:
- "10088:10088"
- "10089:10089"
volumes:
- /HellohaoData/:/HellohaoData/
environment:
MYSQL_URL: jdbc:mysql://hellohaodb/tbed?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
# 自定设置一个MySQL的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致
MYSQL_PASS: tIaNGg@SHa&hIo56
# 前端域名(反代10089端口的域名)
HELLOHAO_WEB_HOST: http://pic.example.com
# 后端域名(反代10088端口的域名)
HELLOHAO_SERVER_HOST: http://server.example.com
hellohaodb:
image: hellohao/mysql-free:1.0
networks:
hellohao_network:
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
ports:
- "3307:3306"
volumes:
- /HellohaoData/mysql:/var/lib/mysql
environment:
# MySQL的密码
MYSQL_ROOT_PASSWORD: tIaNGg@SHa&hIo56
networks:
hellohao_network:
```
2. 启动 Hellohao 服务
```shell
docker-compose up -d
```
更多部署教程参考程序[相关文档](http://doc.hellohao.cn)
### 启动项目
> 访问你的前端域名即可
初始用户名:`admin`
初始邮箱:`admin`
初始密码:`admin`
### 系统预览
![首页](https://upload.cc/i1/2022/02/11/t2wCEF.png)
![首页](https://upload.cc/i1/2023/05/23/Lsdivj.png)
![控制台详情](https://upload.cc/i1/2022/02/11/Al8UrH.png)
@@ -120,11 +169,16 @@ Core版:`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,
[^_^]: ![多存储源](http://img.wwery.com/Hellohao/xXSMlsTg.png)
[^_^]: ![站点设置](http://img.wwery.com/Hellohao/n5zXistG.png)
### 客户端(win64/mac)
> 目前已经正式上线
> ![桌面客户端软件](https://upload.cc/i1/2022/07/13/5W8Pxh.png)
### 运行环境
- JDK 1.8
- MySQL5.5+
- MySQL5.7+
- Redis
### 所用技术
@@ -146,27 +200,8 @@ Core版:`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,
- Shiro
### 部署
> 部署方式分为两种:
> 1.一键脚本部署:`Tbed-together.zip`(操作简单)
> 2.自定义部署 前后端分离式部署:`Tbed.zip`(拓展性高适合有一定java前后端分离部署经验的人)
> 需要注意:一键部署的端口为:服务器:`10088` 前端:`10089`
详细部署教程参考程序[相关文档](http://doc.hellohao.cn)
### 启动项目
初始用户名:`admin`
初始邮箱:`admin`
初始密码:`admin`
### 客户端(win64/mac)
> 目前正在开发过程中,预计将于近期上线。
![桌面客户端软件](https://upload.cc/i1/2022/07/13/5W8Pxh.png)
### 微信小程序
> 目前已有测试版,更多功能开发中,开发进度的快慢要根据作者的工作压力、心情状况等自身情况进行评估。
> 暂时无法给出具体发布小程序的时间。大家期待吧。
@@ -184,11 +219,12 @@ Core版:`本地`,`阿里OSS`,`又拍USS`,`七牛KODO`,`腾讯COS`,`网易NOS`,
**如果你遇到BUG欢迎反馈**
欢迎加入Hellohao开发者交流群,群聊号码:**864800972**
- 前往论坛发帖反馈、求助:[Hellohao开发者交流论坛](http://bbs.hellohao.cn)
- 也可加QQ群探讨:864800972
### 捐赠开发者
### 更多
**如果你也支持Hellohao图床,可以请我喝杯咖啡。我会持续更新Hellohao图床**
**如需程序定制或其他业务,请与我们取得联系**
[Hellohao图像托管官网](http://hellohao.cn)
**捐赠地址:** [**https://tbed.hellohao.cn/pay**](https://tbed.hellohao.cn/pay)
+17
View File
@@ -0,0 +1,17 @@
FROM openjdk:8
MAINTAINER 923453645@qq.com
ADD hellohaotbed/ /hellohaotbed
COPY appstart.sh /appstart.sh
COPY application.properties /application.properties
COPY Tbed.jar /Tbed.jar
EXPOSE 10088
EXPOSE 10089
CMD ["/bin/bash","/appstart.sh"]
+11 -7
View File
@@ -90,11 +90,11 @@
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>commons-logging</groupId>-->
<!-- <artifactId>commons-logging</artifactId>-->
<!-- <version>1.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
@@ -120,7 +120,11 @@
<artifactId>pebble</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.334</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
@@ -130,7 +134,7 @@
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.11.0</version>
<version>4.16.14</version>
</dependency>
<dependency>
<groupId>net.coobird</groupId>
+5 -5
View File
@@ -11,7 +11,7 @@
Target Server Version : 80028
File Encoding : 65001
Date: 01/09/2022 00:28:28
Date: 01/01/2023 23:02:40
*/
SET NAMES utf8mb4;
@@ -99,7 +99,7 @@ CREATE TABLE `config` (
-- ----------------------------
-- Records of config
-- ----------------------------
INSERT INTO `config` VALUES (1, 7, 1, 'Hellohao图床', 'Hellohao图像托管,是一家免费开源的图像托管,即时分享你的美好瞬间。', 'https://hellohao-cloud.oss-cn-beijing.aliyuncs.com/books_x264.mp4http://cdn.wwery.com/Hellohao/439550606022825.jpg', '1', '<p style=\"color:#7c7c88;\">&copy; 2019 <a href=\"http://www.Hellohao.cn/\" target=\"_blank\" title=\"Hellohao\">Hellohao</a><span>&nbsp;&nbsp;- All Rights Reserved</span> </p>', '也许...|这将是最好用的图床|为了更好的用户体验,建议您注册本站继续免费使用Hellohao图床。本站不得上传任何形式的非法图片,一旦发现,永久删除并禁封账户。情节严重者将相关资料交于相关部门处理。', 'var _hmt = _hmt || [];\n(function() {\n var hm = document.createElement(\"script\");\n hm.src = \"https://hm.baidu.com/hm.js?16c326e608c984c9bae6a63eda861888\";\n var s = document.getElementsByTagName(\"script\")[0]; \n s.parentNode.insertBefore(hm, s);\n})();\n\n', 'http://api.hellohao.cn', '', 'http://cdn.wwery.com/Hellohao/3e1901120091153.jpg', 1, 'Hellohao图像托管,是一家免费开源的图像托管,即时分享你的美好瞬间。', 'hellohao图床,图床,图片上传,开源图床,hellohao,图像托管,图片分享', 'https://hellohao.nos-eastchina1.126.net/BlogImg/favicon.ico', 2, '这将是你用过最优秀的图像托管程序', NULL, '<img width=\"300px\" src=\"http://img.wwery.com/Hellohao/rPscRYwz.png\">\n <br />\n <br />\n <p>也许,这将是你用到最优秀的图像托管程序</p>\n <p>本程序为Hellohao图象托管程序</p>\n <br/>\n <p style=\"color: #656565;\">作者:hellohao独立开发</p>\n <p style=\"color: #656565;\">www.hellohao.cn</p>');
INSERT INTO `config` VALUES (1, 7, 1, 'Hellohao图床', 'Hellohao图像托管,是一家免费开源的图像托管,即时分享你的美好瞬间。', 'https://hellohao-cloud.oss-cn-beijing.aliyuncs.com/books_x264.mp4http://cdn.wwery.com/Hellohao/439550606022825.jpg', '1', '<p style=\"color:#7c7c88;\">版权所有&copy;<a href=\"http://tbed.Hellohao.cn/\" target=\"_blank\" title=\"Hellohao\">Hellohao图像托管</a><span>&nbsp;2019- 2023 </span> </p>', '也许...|这将是最好用的图床|为了更好的用户体验,建议您注册本站继续免费使用Hellohao图床。本站不得上传任何形式的非法图片,一旦发现,永久删除并禁封账户。情节严重者将相关资料交于相关部门处理。', 'var _hmt = _hmt || [];\n(function() {\n var hm = document.createElement(\"script\");\n hm.src = \"https://hm.baidu.com/hm.js?16c326e608c984c9bae6a63eda861888\";\n var s = document.getElementsByTagName(\"script\")[0]; \n s.parentNode.insertBefore(hm, s);\n})();\n\n', 'http://api.hellohao.cn', '', 'http://cdn.wwery.com/Hellohao/3e1901120091153.jpg', 1, 'Hellohao图像托管,是一家免费开源的图像托管,即时分享你的美好瞬间。', 'hellohao图床,图床,图片上传,开源图床,hellohao,图像托管,图片分享', 'https://hellohao.nos-eastchina1.126.net/BlogImg/favicon.ico', 2, '这将是你用过最优秀的图像托管程序', NULL, '<img width=\"300px\" src=\"http://img.wwery.com/Hellohao/rPscRYwz.png\">\n <br />\n <br />\n <p>也许,这将是你用到最优秀的图像托管程序</p>\n <p>本程序为Hellohao图象托管程序</p>\n <br/>\n <p style=\"color: #656565;\">作者:hellohao独立开发</p>\n <p style=\"color: #656565;\">www.hellohao.cn</p>');
-- ----------------------------
-- Table structure for emailconfig
@@ -292,7 +292,7 @@ INSERT INTO `uploadconfig` VALUES (1, '10485760', '20971520', 5, 10, 'gif,jpg,jp
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`id` int(0) NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
@@ -309,7 +309,7 @@ CREATE TABLE `user` (
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', 'YWRtaW4=', 'admin', '2019-01-10', 2, '9b76655b2706483780bf54988ca12531', 1, '2147483648', 1, '');
INSERT INTO `user` VALUES (1, 'admin', 'YWRtaW4=', 'admin', '2019-01-10', 2, '05bc9cdc2d454ab59e9cd7eaa9ed296a', 1, '2147483648', 1, '');
-- ----------------------------
-- Table structure for usergroup
@@ -320,7 +320,7 @@ CREATE TABLE `usergroup` (
`userid` int(0) NULL DEFAULT NULL,
`groupid` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of usergroup
+33 -9
View File
@@ -1,24 +1,23 @@
package cn.hellohao;
import javax.servlet.MultipartConfigElement;
import javax.servlet.http.HttpServletRequest;
import cn.hellohao.utils.Print;
import cn.hellohao.dao.KeysMapper;
import cn.hellohao.utils.FirstRun;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.support.DatabaseStartupValidator;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.util.unit.DataSize;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.net.InetAddress;
import java.util.Scanner;
import javax.servlet.MultipartConfigElement;
import javax.sql.DataSource;
import java.util.stream.Stream;
@SpringBootApplication
@Configuration
@@ -30,6 +29,31 @@ public class TbedApplication {
public static void main(String[] args) {
SpringApplication.run(TbedApplication.class, args);
}
//延缓Spring Boot启动时间直到数据库启动的方法
@Bean
public DatabaseStartupValidator databaseStartupValidator(DataSource dataSource) {
DatabaseStartupValidator databaseStartupValidator = new DatabaseStartupValidator();
databaseStartupValidator.setDataSource(dataSource);
databaseStartupValidator.setValidationQuery(DatabaseDriver.POSTGRESQL.getValidationQuery());
return databaseStartupValidator;
}
@Bean
public static BeanFactoryPostProcessor dependsOnPostProcessor() {
return bf -> {
// Let beans that need the database depend on the DatabaseStartupValidator
// like the JPA EntityManagerFactory or Flyway
String[] flyway = bf.getBeanNamesForType(FirstRun.class);
Stream.of(flyway)
.map(bf::getBeanDefinition)
.forEach(it -> it.setDependsOn("databaseStartupValidator"));
String[] jpa = bf.getBeanNamesForType(KeysMapper.class);
Stream.of(jpa)
.map(bf::getBeanDefinition)
.forEach(it -> it.setDependsOn("databaseStartupValidator"));
};
}
/**
* 文件上传配置
* @return
@@ -25,6 +25,7 @@ public class SubjectFilter extends BasicHttpAuthenticationFilter {
public static String WEBHOST = null;
private String CODE ="000";
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
UserServiceImpl userService = SpringContextHolder.getBean(UserServiceImpl.class);
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
@@ -72,12 +73,15 @@ public class SubjectFilter extends BasicHttpAuthenticationFilter {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken tokenOBJ = new UsernamePasswordToken(userData.getEmail(),userData.getPassword());
tokenOBJ.setRememberMe(true);
//执行登录方法,如果没有异常,说明登录成功
subject.login(tokenOBJ);
SecurityUtils.getSubject().getSession().setTimeout(3600000);
User loginUser = (User) SecurityUtils.getSubject().getPrincipal();
}
}
}
// String token = httpServletRequest.getHeader("Authorization");
JSONObject jsonObject = JWTUtil.checkToken(token);
if(!jsonObject.getBoolean("check")){
if(!serviceName.contains("admin") || serviceName.contains("admin/client")){
@@ -96,6 +100,7 @@ public class SubjectFilter extends BasicHttpAuthenticationFilter {
subject.login(tokenOBJ);
SecurityUtils.getSubject().getSession().setTimeout(3600000);//一小时
} catch (Exception e) {
// System.err.println("拦截器,登录失败,false");
this.CODE = "403";
return false;
}
@@ -51,6 +51,7 @@ public class UserRealm extends AuthorizingRealm {
if(u==null){
return null;
}
//密码认证(防止泄露,不需要我们做)
return new SimpleAuthenticationInfo(u,u.getPassword(),"");
}
}
@@ -10,4 +10,7 @@ import java.io.File;
public class GlobalConstant {
public static String SYSTYPE = "LINUX";
public static String LOCPATH = File.separator + "HellohaoData";
public static final String HELLOHAOTEMPIMG_PATH = File.separator + "HellohaoData"+File.separator+"hellohaotempimg";
}
@@ -0,0 +1,44 @@
package cn.hellohao.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.io.PrintStream;
import java.util.function.Consumer;
@Configuration
public class LogSystemProxy {
private final static Logger log = LoggerFactory.getLogger("proxy.system.log");
@PostConstruct
public void initProxy(){
log.debug("LogSystemProxy init .....");
System.setOut(getLoggerProxy(StdType.OUT));
System.setErr(getLoggerProxy(StdType.ERR));
}
private enum StdType{
OUT(System.out, log::info),
ERR(System.err, log::error),
;
PrintStream stream;
Consumer<String> consumer;
StdType(PrintStream stream,Consumer<String> consumer){
this.stream = stream;
this.consumer = consumer;
}
}
private PrintStream getLoggerProxy(StdType stdType){
return new PrintStream(stdType.stream){
@Override
public void print(String s) {
stdType.stream.print(s);
stdType.consumer.accept(s);
}
};
}
}
@@ -0,0 +1,52 @@
package cn.hellohao.config;
import lombok.Data;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
//线程池
@Configuration
@EnableAsync
public class PoolConfig {
ThreadPoolProperties properties = new ThreadPoolProperties();
@Bean(name = "taskExecutor")
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(properties.getCorePoolSize());
executor.setMaxPoolSize(properties.getMaxPoolSize());
executor.setQueueCapacity(properties.getQueueCapacity());
executor.setThreadNamePrefix(properties.getThreadNamePrefix());
executor.setKeepAliveSeconds(properties.getKeepAliveTime());
executor.setWaitForTasksToCompleteOnShutdown(properties.isWaitForTasksToCompleteOnShutdown());
executor.setAwaitTerminationSeconds(properties.getAwaitTerminationSeconds());
// 设置任务拒绝策略
/**
* 4种
* ThreadPoolExecutor类有几个内部实现类来处理这类情况:
- AbortPolicy 丢弃任务,抛RejectedExecutionException
- CallerRunsPolicy 由该线程调用线程运行。直接调用Runnable的run方法运行。
- DiscardPolicy 抛弃策略,直接丢弃这个新提交的任务
- DiscardOldestPolicy 抛弃旧任务策略,从队列中踢出最先进入队列(最后一个执行)的任务
* 实现RejectedExecutionHandler接口,可自定义处理器
*/
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
@Data
class ThreadPoolProperties {
private int corePoolSize = 5;
private int maxPoolSize = 50;
private int keepAliveTime = 15;
private int queueCapacity = 6;
private String threadNamePrefix = "Tbed-Thread";
private boolean allowCoreThreadTimeout = false;
private boolean waitForTasksToCompleteOnShutdown = false;
private int awaitTerminationSeconds;
}
}
@@ -4,22 +4,34 @@ import cn.hellohao.config.SysName;
import cn.hellohao.pojo.*;
import cn.hellohao.pojo.vo.PageResultBean;
import cn.hellohao.service.*;
import cn.hellohao.service.impl.*;
import cn.hellohao.utils.*;
import cn.hellohao.service.impl.AlbumServiceImpl;
import cn.hellohao.service.impl.UserServiceImpl;
import cn.hellohao.service.impl.deleImages;
import cn.hellohao.utils.Base64Encryption;
import cn.hellohao.utils.SetFiles;
import cn.hellohao.utils.SetText;
import cn.hellohao.utils.progress.MyProgress;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* @author Hellohao
@@ -30,25 +42,16 @@ import java.util.*;
@RequestMapping("/admin")
public class AdminController {
@Autowired
private ImgService imgService;
@Autowired
private KeysService keysService;
@Autowired
private UserServiceImpl userService;
@Autowired
private ImgreviewService imgreviewService;
@Autowired
private UploadConfigService uploadConfigService;
@Autowired
private CodeService codeService;
@Autowired
private AlbumService albumService;
@Autowired
AlbumServiceImpl albumServiceI;
@Autowired
private deleImages deleimages;
@Autowired private ImgService imgService;
@Autowired private KeysService keysService;
@Autowired private UserServiceImpl userService;
@Autowired private ImgreviewService imgreviewService;
@Autowired private UploadConfigService uploadConfigService;
@Autowired private CodeService codeService;
@Autowired private AlbumService albumService;
@Autowired AlbumServiceImpl albumServiceI;
@Autowired private deleImages deleimages;
@Autowired private IRedisService iRedisService;
@PostMapping(value = "/overviewData")
@ResponseBody
@@ -56,7 +59,7 @@ public class AdminController {
Msg msg = new Msg();
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
user = userService.getUsers(user);
user = userService.getUsers(user);
JSONObject jsonObject = new JSONObject();
UploadConfig uploadConfig = uploadConfigService.getUpdateConfig();
Imgreview imgreview = imgreviewService.selectByPrimaryKey(1);
@@ -66,45 +69,51 @@ public class AdminController {
jsonObject.put("myImgTotal", imgService.countimg(user.getId()));
jsonObject.put("myAlbumTitle", albumService.selectAlbumCount(user.getId()));
long memory = Long.valueOf(user.getMemory());
Long usermemory = imgService.getusermemory(user.getId())==null?0L:imgService.getusermemory(user.getId());
if(memory==0){
jsonObject.put("myMemory","无容量");
}else{
Double aDouble = Double.valueOf(String.format("%.2f", (((double)usermemory/(double)memory)*100)));
if(aDouble>=999){
jsonObject.put("myMemory",999);
}else{
jsonObject.put("myMemory",aDouble);
Long usermemory =
imgService.getusermemory(user.getId()) == null
? 0L
: imgService.getusermemory(user.getId());
if (memory == 0) {
jsonObject.put("myMemory", "无容量");
} else {
Double aDouble =
Double.valueOf(String.format("%.2f", (((double) usermemory / (double) memory) * 100)));
if (aDouble >= 999) {
jsonObject.put("myMemory", 999);
} else {
jsonObject.put("myMemory", aDouble);
}
}
jsonObject.put("myMemorySum",SetFiles.readableFileSize(memory));
if(user.getLevel()>1){
jsonObject.put("myMemorySum", SetFiles.readableFileSize(memory));
if (user.getLevel() > 1) {
ok = "true";
jsonObject.put("imgTotal", imgService.counts(null) );
jsonObject.put("imgTotal", imgService.counts(null));
jsonObject.put("userTotal", userService.getUserTotal());
jsonObject.put("ViolationImgTotal", imgreview.getCount());
jsonObject.put("ViolationSwitch", isImgreviewOK==null?0:isImgreviewOK.getId());
jsonObject.put("ViolationSwitch", isImgreviewOK == null ? 0 : isImgreviewOK.getId());
jsonObject.put("VisitorUpload", uploadConfig.getIsupdate());
jsonObject.put("VisitorMemory", SetFiles.readableFileSize(Long.valueOf(uploadConfig.getVisitormemory())));//访客共大小
if(uploadConfig.getIsupdate()!=1){
jsonObject.put(
"VisitorMemory",
SetFiles.readableFileSize(Long.valueOf(uploadConfig.getVisitormemory()))); // 访客共大小
if (uploadConfig.getIsupdate() != 1) {
jsonObject.put("VisitorUpload", 0);
jsonObject.put("VisitorProportion",100.00);
jsonObject.put("VisitorProportion", 100.00);
jsonObject.put("VisitorMemory", "禁用");
}else{
Long temp = imgService.getusermemory(0)==null?0:imgService.getusermemory(0);
} else {
Long temp = imgService.getusermemory(0) == null ? 0 : imgService.getusermemory(0);
jsonObject.put("UsedMemory", (temp == null ? 0 : SetFiles.readableFileSize(temp)));
if(Long.valueOf(uploadConfig.getVisitormemory())==0){
jsonObject.put("VisitorProportion",100.00);
}else if(Long.valueOf(uploadConfig.getVisitormemory())==-1){
jsonObject.put("VisitorProportion",0);
if (Long.valueOf(uploadConfig.getVisitormemory()) == 0) {
jsonObject.put("VisitorProportion", 100.00);
} else if (Long.valueOf(uploadConfig.getVisitormemory()) == -1) {
jsonObject.put("VisitorProportion", 0);
jsonObject.put("VisitorMemory", "无限");
}else{
} else {
double sum = Double.valueOf(uploadConfig.getVisitormemory());
Double aDouble = Double.valueOf(String.format("%.2f", ((double) temp / sum) * 100));
if(aDouble>=999){
jsonObject.put("VisitorProportion",999);
}else{
jsonObject.put("VisitorProportion",aDouble);
if (aDouble >= 999) {
jsonObject.put("VisitorProportion", 999);
} else {
jsonObject.put("VisitorProportion", aDouble);
}
}
}
@@ -117,40 +126,40 @@ public class AdminController {
@PostMapping(value = "/SpaceExpansion")
@ResponseBody
public Msg SpaceExpansion(@RequestParam(value = "data", defaultValue = "") String data) {
final Msg msg = new Msg();
final JSONObject jsonObject = JSONObject.parseObject(data);
Msg msg = new Msg();
JSONObject jsonObject = JSONObject.parseObject(data);
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
user = userService.getUsers(user);
if(user.getIsok()==0){
user = userService.getUsers(user);
if (user.getIsok() == 0) {
msg.setCode("100403");
msg.setInfo("你暂时无法使用此功能");
return msg;
}
if(null==user){
if (null == user) {
msg.setCode("100405");
msg.setInfo("用户信息不存在");
return msg;
}else{
} else {
long sizes = 0;
Code code = codeService.selectCodekey(jsonObject.getString("code"));
if(null==code){
if (null == code) {
msg.setCode("100404");
msg.setInfo("扩容码不存在,请重新填写");
return msg;
}
Long userMemory = Long.valueOf(user.getMemory());
sizes = Long.valueOf(code.getValue())+ userMemory;
sizes = Long.valueOf(code.getValue()) + userMemory;
User newMemoryUser = new User();
newMemoryUser.setMemory(Long.toString(sizes));
newMemoryUser.setId(user.getId());
userService.usersetmemory(newMemoryUser,jsonObject.getString("code"));
msg.setInfo("你已成功扩容"+SetFiles.readableFileSize(sizes));
userService.usersetmemory(newMemoryUser, jsonObject.getString("code"));
msg.setInfo("你已成功扩容" + SetFiles.readableFileSize(sizes));
return msg;
}
}
@PostMapping(value={"/setImgFileName","/client/setImgFileName"})
@PostMapping(value = {"/setImgFileName", "/client/setImgFileName"})
@ResponseBody
public Msg setImgFileName(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
@@ -162,7 +171,7 @@ public class AdminController {
images.setIdname(name.replaceAll(" ", ""));
images.setImgname(imgname);
imgService.setImg(images);
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
msg.setCode("500");
}
@@ -173,18 +182,18 @@ public class AdminController {
@ResponseBody
public Msg getRecently() {
Msg msg = new Msg();
final JSONObject jsonObject = new JSONObject();
JSONObject jsonObject = new JSONObject();
try {
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
user = userService.getUsers(user);
if(user.getLevel()>1){
jsonObject.put("RecentlyUser",imgService.RecentlyUser());
jsonObject.put("RecentlyUploaded",imgService.RecentlyUploaded(user.getId()));
}else{
jsonObject.put("RecentlyUploaded",imgService.RecentlyUploaded(user.getId()));
user = userService.getUsers(user);
if (user.getLevel() > 1) {
jsonObject.put("RecentlyUser", imgService.RecentlyUser());
jsonObject.put("RecentlyUploaded", imgService.RecentlyUploaded(user.getId()));
} else {
jsonObject.put("RecentlyUploaded", imgService.RecentlyUploaded(user.getId()));
}
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
msg.setInfo("系统内部错误");
msg.setCode("500");
@@ -198,7 +207,7 @@ public class AdminController {
@ResponseBody
public Msg updateToken() {
Msg msg = new Msg();
try{
try {
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
User u = new User();
@@ -208,63 +217,64 @@ public class AdminController {
user.setToken(u.getToken());
msg.setData(u.getToken());
msg.setInfo("Token更新成功,即可生效");
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
msg.setCode("500");
msg.setInfo("Token更新失败");
}
return msg;
}
@PostMapping("/getYyyy")
@PostMapping("/getYyyy")
@ResponseBody
public Msg getYyyy(){
final Msg msg = new Msg();
public Msg getYyyy() {
Msg msg = new Msg();
Subject subject = SecurityUtils.getSubject();
User u = (User) subject.getPrincipal();
final JSONObject jsonObject = new JSONObject();
jsonObject.put("allYyyy",imgService.getyyyy(null));
jsonObject.put("userYyyy",imgService.getyyyy(u.getId()));
JSONObject jsonObject = new JSONObject();
jsonObject.put("allYyyy", imgService.getyyyy(null));
jsonObject.put("userYyyy", imgService.getyyyy(u.getId()));
msg.setData(jsonObject);
return msg;
}
@PostMapping("/getChart")
@PostMapping("/getChart")
@ResponseBody
public Msg getChart(@RequestParam(value = "data", defaultValue = "") String data){
public Msg getChart(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
JSONObject jsonObject = JSONObject.parseObject(data);
String yyyy = jsonObject.getString("yyyy");
Integer type = jsonObject.getInteger("type");
Subject subject = SecurityUtils.getSubject();
User u = (User) subject.getPrincipal();
List<Images> list =null;
if(u.getLevel()>1){
if(type==2){
List<Images> list = null;
if (u.getLevel() > 1) {
if (type == 2) {
Images images = new Images();
images.setYyyy(yyyy);
list = imgService.countByM(images);
}else{
} else {
Images images = new Images();
images.setYyyy(yyyy);
images.setUserid(u.getId());
list = imgService.countByM(images);
}
}else{
} else {
Images images = new Images();
images.setYyyy(yyyy);
images.setUserid(u.getId());
list = imgService.countByM(images);
}
JSONArray json = JSONArray.parseArray("[{\"id\":1,\"monthNum\":\"一月\",\"countNum\":0},{\"id\":2,\"monthNum\":\"二月\",\"countNum\":0},{\"id\":3,\"monthNum\":\"三月\",\"countNum\":0},{\"id\":4,\"monthNum\":\"四月\",\"countNum\":0},{\"id\":5,\"monthNum\":\"五月\",\"countNum\":0},{\"id\":6,\"monthNum\":\"六月\",\"countNum\":0},{\"id\":7,\"monthNum\":\"七月\",\"countNum\":0},{\"id\":8,\"monthNum\":\"八月\",\"countNum\":0},{\"id\":9,\"monthNum\":\"九月\",\"countNum\":0},{\"id\":10,\"monthNum\":\"十月\",\"countNum\":0},{\"id\":11,\"monthNum\":\"十一月\",\"countNum\":0},{\"id\":12,\"monthNum\":\"十二月\",\"countNum\":0}]");
JSONArray json =
JSONArray.parseArray(
"[{\"id\":1,\"monthNum\":\"一月\",\"countNum\":0},{\"id\":2,\"monthNum\":\"二月\",\"countNum\":0},{\"id\":3,\"monthNum\":\"三月\",\"countNum\":0},{\"id\":4,\"monthNum\":\"四月\",\"countNum\":0},{\"id\":5,\"monthNum\":\"五月\",\"countNum\":0},{\"id\":6,\"monthNum\":\"六月\",\"countNum\":0},{\"id\":7,\"monthNum\":\"七月\",\"countNum\":0},{\"id\":8,\"monthNum\":\"八月\",\"countNum\":0},{\"id\":9,\"monthNum\":\"九月\",\"countNum\":0},{\"id\":10,\"monthNum\":\"十月\",\"countNum\":0},{\"id\":11,\"monthNum\":\"十一月\",\"countNum\":0},{\"id\":12,\"monthNum\":\"十二月\",\"countNum\":0}]");
JSONArray jsonArray = new JSONArray();
for (int j = 0; j < list.size(); j++) {
for (int i = 0; i < json.size(); i++) {
JSONObject jobj = json.getJSONObject(i);
if(jobj.getInteger("id")==list.get(j).getMonthNum()){
jobj.put("monthNum",getChinaes(list.get(j).getMonthNum()));
jobj.put("countNum",list.get(j).getCountNum());
if (jobj.getInteger("id") == list.get(j).getMonthNum()) {
jobj.put("monthNum", getChinaes(list.get(j).getMonthNum()));
jobj.put("countNum", list.get(j).getCountNum());
}
}
}
@@ -272,7 +282,7 @@ public class AdminController {
return msg;
}
@PostMapping("/getStorage")
@PostMapping("/getStorage")
@ResponseBody
public Msg getStorage() {
Msg msg = new Msg();
@@ -281,7 +291,7 @@ public class AdminController {
return msg;
}
@PostMapping("/getStorageName")
@PostMapping("/getStorageName")
@ResponseBody
public Msg getStorageName() {
Msg msg = new Msg();
@@ -290,7 +300,7 @@ public class AdminController {
return msg;
}
@PostMapping(value = {"/selectPhoto","/client/selectPhoto"})
@PostMapping(value = {"/selectPhoto", "/client/selectPhoto"})
@ResponseBody
public Msg selectPhoto(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
@@ -302,18 +312,19 @@ public class AdminController {
Integer source = jsonObj.getInteger("source");
String starttime = jsonObj.getString("starttime");
String stoptime = jsonObj.getString("stoptime");
String selectUserType = jsonObj.getString("selectUserType");//me/all
String selectUserType = jsonObj.getString("selectUserType"); // me/all
String username = jsonObj.getString("username");
String searchname = jsonObj.getString("searchname");
Integer selecttype = jsonObj.getInteger("selecttype");
boolean violation = jsonObj.getBoolean("violation");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(starttime!=null){
if (starttime != null) {
try {
Date date1 = format.parse(starttime);
Date date2 = format.parse(stoptime==null?format.format(new Date()):stoptime);
Date date2 = format.parse(stoptime == null ? format.format(new Date()) : stoptime);
int compareTo = date1.compareTo(date2);
System.out.println(compareTo);
if(compareTo==1){
if (compareTo == 1) {
msg.setCode("110500");
msg.setInfo("起始日期不能大于结束日期");
return msg;
@@ -327,44 +338,48 @@ public class AdminController {
}
Images img = new Images();
PageHelper.startPage(pageNum, pageSize);
if(violation){
if (violation) {
img.setViolation("true");
}
img.setStarttime(starttime);
img.setStoptime(stoptime);
if(subject.hasRole("admin")){
if (subject.hasRole("admin")) {
img.setSource(source);
if(selectUserType.equals("me")){
if (selectUserType.equals("me")) {
img.setUserid(user.getId());
img.setUsername(null);
img.setSelecttype(null);
}else{
} else {
img.setUsername(username);
img.setSelecttype(selecttype);
}
}else{
} else {
img.setUserid(user.getId());
}
if(!StringUtils.isBlank(searchname)){
img.setSearchname(searchname);
}
List<Images> images = imgService.selectimg(img);
PageInfo<Images> rolePageInfo = new PageInfo<>(images);
PageResultBean<Images> pageResultBean = new PageResultBean<>(rolePageInfo.getTotal(), rolePageInfo.getList());
PageResultBean<Images> pageResultBean =
new PageResultBean<>(rolePageInfo.getTotal(), rolePageInfo.getList());
msg.setData(pageResultBean);
return msg;
}
@PostMapping(value = "/getUserInfo")
@PostMapping(value = "/getUserInfo")
@ResponseBody
public Msg getUserInfo() {
Msg msg = new Msg();
try {
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
final User u = new User();
User u = new User();
u.setId(user.getId());
User userInfo = userService.getUsers(u);
JSONObject jsonObject = new JSONObject();
jsonObject.put("username",userInfo.getUsername());
jsonObject.put("email",userInfo.getEmail());
jsonObject.put("username", userInfo.getUsername());
jsonObject.put("email", userInfo.getEmail());
msg.setData(jsonObject);
} catch (Exception e) {
e.printStackTrace();
@@ -374,7 +389,7 @@ public class AdminController {
return msg;
}
@PostMapping("/setUserInfo")
@PostMapping("/setUserInfo")
@ResponseBody
public Msg setUserInfo(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
@@ -386,44 +401,44 @@ public class AdminController {
Subject subject = SecurityUtils.getSubject();
User u = (User) subject.getPrincipal();
User user = new User();
if(!SetText.checkEmail(email)){
if (!SetText.checkEmail(email)) {
msg.setCode("110403");
msg.setInfo("邮箱格式不正确");
return msg;
}
String regex = "^\\w+$";
if(username.length()>20 || !username.matches (regex)){
if (username.length() > 20 || !username.matches(regex)) {
msg.setCode("110403");
msg.setInfo("用户名不得超过20位字符");
return msg;
}
if(subject.hasRole("admin")){
final User userOld = new User();
if (subject.hasRole("admin")) {
User userOld = new User();
userOld.setId(u.getId());
User userInfo = userService.getUsers(userOld);
if(!userInfo.getUsername().equals(username)){
if (!userInfo.getUsername().equals(username)) {
Integer countusername = userService.countusername(username);
if(countusername == 1 || !SysName.CheckSysName(username)){
if (countusername == 1 || !SysName.CheckSysName(username)) {
msg.setCode("110406");
msg.setInfo("此用户名已存在");
return msg;
}else {
} else {
user.setUsername(username);
}
}
if(!userInfo.getEmail().equals(email)){
if (!userInfo.getEmail().equals(email)) {
Integer countmail = userService.countmail(email);
if(countmail == 1){
if (countmail == 1) {
msg.setCode("110407");
msg.setInfo("此邮箱已被注册");
return msg;
}else{
} else {
user.setEmail(email);
}
}
user.setPassword(Base64Encryption.encryptBASE64(password.getBytes()));
user.setUid(u.getUid());
}else{
} else {
user.setPassword(Base64Encryption.encryptBASE64(password.getBytes()));
user.setUid(u.getUid());
}
@@ -437,121 +452,133 @@ public class AdminController {
return msg;
}
@PostMapping({"/deleImages","/client/deleImages"})
@PostMapping({"/deleImages", "/client/deleImages"})
@ResponseBody
public Msg deleImages(HttpSession httpSession, @RequestParam(value = "data", defaultValue = "") String data) {
public Msg deleImages(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
JSONObject jsonObj = JSONObject.parseObject(data);
final String images = jsonObj.getString("images");
if(images==null){
String images = jsonObj.getString("images");
String uuid = jsonObj.getString("uuid");
if (images == null) {
msg.setCode("404");
msg.setInfo("为获取到图像信息");
return msg;
}
final String[] split = images.split(",");
String[] split = images.split(",");
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
if(null == user){
if (null == user) {
msg.setCode("500");
msg.setInfo("当前用户信息不存在");
return msg;
}
if(split.length==0){
if (split.length == 0) {
msg.setCode("404");
msg.setInfo("为获取到图像信息");
return msg;
}
List<Integer> imgIds = new ArrayList<Integer>();
List<Long> imgIds = new ArrayList<Long>();
for (int i = 0; i < split.length; i++) {
Integer imgid = Integer.valueOf(split[i]);
Long imgid = Long.valueOf(split[i]);
Images image = imgService.selectByPrimaryKey(imgid);
if(!subject.hasRole("admin")){
if(!image.getUserid().equals(user.getId())){
if (!subject.hasRole("admin")) {
if (!image.getUserid().equals(user.getId())) {
break;
}
}
imgIds.add(imgid);
}
if(imgIds.size()==0){
if (imgIds.size() == 0) {
msg.setCode("110404");
}else{
deleimages.dele(httpSession,imgIds.stream().toArray(Integer[]::new));
} else {
deleimages.dele(uuid, imgIds.stream().toArray(Long[]::new));
msg.setCode("200");
}
return msg;
}
@PostMapping({"/GetDelprogress","/client/GetDelprogress"})
@PostMapping({"/GetDelprogress", "/client/GetDelprogress"})
@ResponseBody
public Msg GetDelprogress(HttpSession httpSession) {
Msg msg =new Msg();
JSONObject jsonObject = new JSONObject();
MyProgress myProgress = (MyProgress)httpSession.getAttribute("myProgressForDel");
if(null==myProgress){
jsonObject.put("succ",myProgress.getDelSuccessCount());
jsonObject.put("errorlist",new ArrayList<String>());
jsonObject.put("oklist",new ArrayList<Long>());
jsonObject.put("delover",false);
}else{
jsonObject.put("succ",myProgress.getDelSuccessCount());
jsonObject.put("errorlist",myProgress.getDelErrorImgListt());
jsonObject.put("oklist",myProgress.getDelSuccessImgList());
jsonObject.put("delover",myProgress.getDelOCT());
}
msg.setData(jsonObject);
if(myProgress.getDelOCT()){
System.out.println("循环遍历的值:"+myProgress.getDelOCT());
msg.setCode("100");
}else{
public Msg GetDelprogress(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
try {
JSONObject jsonObj = JSONObject.parseObject(data);
String uuid = jsonObj.getString("uuid");
JSONObject jsonObject = new JSONObject();
MyProgress myProgress = null;
try{
myProgress = JSON.parseObject(iRedisService.getValue(uuid).toString(), MyProgress.class);
}catch (Exception e){ }
msg.setCode("110666");
msg.setInfo("正在执行");
if (null == myProgress) {
jsonObject.put("succ", 0);
jsonObject.put("errorlist", new ArrayList<String>());
jsonObject.put("oklist", new ArrayList<Long>());
jsonObject.put("delover", false);
} else {
jsonObject.put("succ", myProgress.getDelSuccessCount());
jsonObject.put("errorlist", myProgress.getDelErrorImgListt());
jsonObject.put("oklist", myProgress.getDelSuccessImgList());
jsonObject.put("delover", myProgress.getDelOCT());
if(myProgress.getDelOCT()==1){
System.out.println("循环遍历的值:"+myProgress.getDelOCT());
msg.setCode("100");
}
}
msg.setData(jsonObject);
return msg;
} catch (Exception e) {
e.printStackTrace();
msg.setCode("110500");
msg.setInfo("正在执行过程中发生错误");
return msg;
}
return msg;
}
private static String getChinaes(int v){
private static String getChinaes(int v) {
String ch = "";
switch(v){
case 1 :
switch (v) {
case 1:
ch = "一月";
break; //可选
case 2 :
break; // 可选
case 2:
ch = "二月";
break; //可选
case 3 :
break; // 可选
case 3:
ch = "三月";
break; //可选
case 4 :
break; // 可选
case 4:
ch = "四月";
break; //可选
case 5 :
break; // 可选
case 5:
ch = "五月";
break; //可选
case 6 :
break; // 可选
case 6:
ch = "六月";
break; //可选
case 7 :
break; // 可选
case 7:
ch = "七月";
break; //可选
case 8 :
break; // 可选
case 8:
ch = "八月";
break; //可选
case 9 :
break; // 可选
case 9:
ch = "九月";
break; //可选
case 10 :
break; // 可选
case 10:
ch = "十月";
break; //可选
case 11 :
break; // 可选
case 11:
ch = "十一月";
break; //可选
case 12 :
break; // 可选
case 12:
ch = "十二月";
break; //可选
default : ch = "";//可选
//语句
break; // 可选
default:
ch = ""; // 可选
// 语句
}
return ch;
}
}
@@ -4,7 +4,9 @@ import cn.hellohao.pojo.*;
import cn.hellohao.service.*;
import cn.hellohao.service.impl.*;
import cn.hellohao.utils.NewSendEmail;
import cn.hellohao.utils.Print;
import cn.hellohao.utils.SetFiles;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -19,13 +21,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
@Controller
@RequestMapping("/admin/root")
public class AdminRootController {
@Autowired
private ConfigService configService;
private ConfdataService confdataService;
@Autowired
private KeysService keysService;
@Autowired
@@ -194,9 +199,9 @@ public class AdminRootController {
} else if (key.getStorageType() == 6) {
ret = COSImageupload.Initialize(key);
} else if (key.getStorageType() == 7) {
ret = FTPImageupload.Initialize(key);
ret = FtpServiceImpl.Initialize(key);
} else if (key.getStorageType() == 8) {
ret = UFileImageupload.Initialize(key);
ret = S3Imageupload.Initialize(key);
}
Long l = imgService.getsourcememory(keyId);
jsonObject.put("isok", ret);
@@ -219,23 +224,24 @@ public class AdminRootController {
@ResponseBody
public Msg updateStorage(@RequestParam(value = "data", defaultValue = "") String data) {
JSONObject jsonObj = JSONObject.parseObject(data);
Integer id = jsonObj.getInteger("id");
String AccessKey = jsonObj.getString("AccessKey");
String AccessSecret = jsonObj.getString("AccessSecret");
String Endpoint = jsonObj.getString("Endpoint");
String Bucketname = jsonObj.getString("Bucketname");
String RequestAddress = jsonObj.getString("RequestAddress");
Integer storageType = jsonObj.getInteger("storageType");
String keyname = jsonObj.getString("keyname");
Keys keys = new Keys();
keys.setId(id);
keys.setAccessKey(AccessKey);
keys.setAccessSecret(AccessSecret);
keys.setEndpoint(Endpoint);
keys.setBucketname(Bucketname);
keys.setRequestAddress(RequestAddress);
keys.setStorageType(storageType);
keys.setKeyname(keyname);
// Integer id = jsonObj.getInteger("id");
// String AccessKey = jsonObj.getString("AccessKey");
// String AccessSecret = jsonObj.getString("AccessSecret");
// String Endpoint = jsonObj.getString("Endpoint");
// String Bucketname = jsonObj.getString("Bucketname");
// String RequestAddress = jsonObj.getString("RequestAddress");
// Integer storageType = jsonObj.getInteger("storageType");
// String keyname = jsonObj.getString("keyname");
// Keys keys = new Keys();
// keys.setId(id);
// keys.setAccessKey(AccessKey);
// keys.setAccessSecret(AccessSecret);
// keys.setEndpoint(Endpoint);
// keys.setBucketname(Bucketname);
// keys.setRequestAddress(RequestAddress);
// keys.setStorageType(storageType);
// keys.setKeyname(keyname);
Keys keys = JSON.toJavaObject(jsonObj,Keys.class);
Msg msg = keysService.updateKey(keys);
return msg;
}
@@ -260,7 +266,7 @@ public class AdminRootController {
User u = (User) subject.getPrincipal();
try {
UploadConfig uploadConfig = uploadConfigService.getUpdateConfig();
Config config = configService.getSourceype();
final Confdata confdata = confdataService.selectConfdata("config");
SysConfig sysConfig = sysConfigService.getstate();
AppClient appClientData = appClientService.getAppClientData("app");
uploadConfig.setUsermemory(Long.toString(Long.valueOf(uploadConfig.getUsermemory()) / 1024 / 1024));
@@ -268,7 +274,7 @@ public class AdminRootController {
uploadConfig.setFilesizetourists(Long.toString(Long.valueOf(uploadConfig.getFilesizetourists()) / 1024 / 1024));
uploadConfig.setFilesizeuser(Long.toString(Long.valueOf(uploadConfig.getFilesizeuser()) / 1024 / 1024));
jsonObject.put("uploadConfig", uploadConfig);
jsonObject.put("config", config);
jsonObject.put("config", JSONObject.parseObject(confdata.getJsondata()));
jsonObject.put("sysConfig", sysConfig);
jsonObject.put("appClient", appClientData);
msg.setData(jsonObject);
@@ -296,7 +302,7 @@ public class AdminRootController {
msg.setCode("500");
return msg;
}
Config config = JSON.toJavaObject((JSON) jsonObject.get("config"), Config.class);
// Config config = JSON.toJavaObject((JSON) jsonObject.get("config"), Config.class);
SysConfig sysConfig = JSON.toJavaObject((JSON) jsonObject.get("sysConfig"), SysConfig.class);
AppClient appClient = JSON.toJavaObject((JSON) jsonObject.get("appClient"), AppClient.class);
if (Integer.valueOf(vm) == -1) {
@@ -308,7 +314,10 @@ public class AdminRootController {
uploadConfig.setUsermemory(Long.toString(Long.valueOf(uploadConfig.getUsermemory()) * 1024 * 1024));
uploadConfig.setFilesizeuser(Long.toString(Long.valueOf(uploadConfig.getFilesizeuser()) * 1024 * 1024));
uploadConfigService.setUpdateConfig(uploadConfig);
configService.setSourceype(config);
Confdata confdata = new Confdata();
confdata.setKey("config");
confdata.setJsondata(jsonObject.getJSONObject("config").toJSONString());
confdataService.updateConfdata(confdata);
sysConfigService.setstate(sysConfig);
if (!appClient.getIsuse().equals("on")) {
appClient.setIsuse("off");
@@ -388,5 +397,50 @@ public class AdminRootController {
return msg;
}
@PostMapping("/sysVersion")
@ResponseBody
public Msg sysupdate(@RequestParam(value = "data", defaultValue = "") String data) {
final Msg msg = new Msg();
JSONObject jsonObj = JSONObject.parseObject(data);
String dates = jsonObj.getString("dates");
HashMap<String, Object> paramMap = new HashMap<>();
String urls = "http://check.hellohao.cn:8090/getNoticeText";
JSONObject jsonObject =null;
try {
URL u = new URL(urls);
HttpURLConnection uConnection = (HttpURLConnection) u.openConnection();
uConnection.connect();
if(uConnection.getResponseCode()==200){
jsonObject =JSONObject.parseObject(HttpUtil.get(urls));
String openv = jsonObject.getString("openv");
String opentext = jsonObject.getString("opentext");
JSONObject versionJson = new JSONObject();
if(Double.valueOf(openv)>Double.valueOf(dates)){
versionJson.put("code","110200");
versionJson.put("newVersion",openv);
versionJson.put("versionMsg",opentext);
msg.setCode("110200");
msg.setData(versionJson);
}else{
versionJson.put("code","110300");
versionJson.put("newVersion",openv);
versionJson.put("versionMsg","当前已是最新版本");
msg.setCode("110300");
msg.setData(versionJson);
}
}else{
msg.setCode("110500");
msg.setData("未获取到更新状态");
}
uConnection.disconnect();
} catch (Exception e) {
e.printStackTrace();
Print.warning("connect failed");
msg.setCode("110500");
msg.setData("未获取到更新状态");
}
return msg;
}
}
@@ -97,7 +97,8 @@ public class AlbumController {
}
@PostMapping("/admin/getAlbumListForKey")
//后台列表要修改时的查询表单
@PostMapping("/admin/getAlbumListForKey")
@ResponseBody
public Msg getAlbumListForKey(@RequestParam(value = "data", defaultValue = "") String data){
Msg msg = new Msg();
@@ -213,6 +214,8 @@ public class AlbumController {
String password = jsonObject.getString("password");
JSONArray jsonArray = JSONArray.parseArray(jsonObject.getString("albumlist"));
if(null!=password){
// String regex = "^[a-z0-9A-Z\u4e00-\u9fa5]+$";
// return str.matches(regex);
password = password.replace(" ", "");
if(password.replace(" ", "").equals("") || password.length()<3){
msg.setCode("110403");
@@ -10,13 +10,16 @@ import cn.hellohao.service.UploadConfigService;
import cn.hellohao.service.impl.UploadServicel;
import cn.hellohao.service.impl.UserServiceImpl;
import cn.hellohao.utils.Base64ToMultipartFile;
import cn.hellohao.utils.SetFiles;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
/**
* @author Hellohao
@@ -85,17 +88,40 @@ public class ClientAppController {
return msg;
}
@PostMapping("/imgUploading")
public Msg imgUploading(@RequestParam(required = true, value = "data") String data, HttpServletRequest request) {
@PostMapping("/imgUpload")
public Msg imgUpload(HttpServletRequest request, @RequestParam(required = true, value = "file") MultipartFile multipartFile,
@RequestParam(required = true, value = "days") String days) {
Msg msg = new Msg();
try{
if (null != multipartFile) {
String originalFilename = multipartFile.getOriginalFilename();
if(StringUtils.isBlank(originalFilename)){
originalFilename = "未命名图像";
}
File file = SetFiles.changeFile_new(multipartFile);
msg = uploadServicel.uploadForLoc(request,file,originalFilename,Integer.valueOf(days),null,null);
}else{
msg.setCode("500");
}
}catch (Exception e){
e.printStackTrace();
msg.setCode("500");
}
return msg;
}
@PostMapping("/imgUploadForCopy")
public Msg imgUploadForCopy(@RequestParam(required = true, value = "data") String data, HttpServletRequest request) {
Msg msg = new Msg();
try{
JSONObject jsonObj = JSONObject.parseObject(data);
String imgstr = jsonObj.getString("imgstr");
Integer days = jsonObj.getInteger("days");
// String imgclass = jsonObj.getString("imgclass");
String md5 = jsonObj.getString("md5");
if (null != imgstr && !imgstr.isEmpty()) {
MultipartFile multipartFile = Base64ToMultipartFile.base64Convert(imgstr);
msg = uploadServicel.uploadForLoc(request, multipartFile, days, null);
File file = SetFiles.changeFile_new(multipartFile);
msg = uploadServicel.uploadForLoc(request, file,"未命名图像", days, null,md5);
}
}catch (Exception e){
e.printStackTrace();
@@ -2,11 +2,9 @@ package cn.hellohao.controller;
import cn.hellohao.pojo.Msg;
import cn.hellohao.service.impl.ClientService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
@@ -17,17 +15,30 @@ import javax.servlet.http.HttpServletRequest;
* @date 2019-07-18 17:22
*/
@RestController
@RequestMapping("/api")
public class ClientController {
@Autowired
private ClientService clientService;
@Autowired private ClientService clientService;
@PostMapping(value = "/uploadbymail")
@ResponseBody
public Msg uploadbymail(HttpServletRequest request, @RequestParam("file") MultipartFile file, String mail, String pass) {
Msg resultBean = clientService.uploadImg(request, file, mail, pass);
public Msg uploadbymail(
HttpServletRequest request,
@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "mail", defaultValue = "") String mail,
@RequestParam(value = "pass", defaultValue = "") String pass,
@RequestParam(value = "days", defaultValue = "0") String days) {
if (file == null
|| StringUtils.isBlank(mail)
|| StringUtils.isBlank(pass)) {
Msg msg = new Msg();
msg.setCode("400");
msg.setInfo("相关参数不能为空");
return msg;
}
Msg resultBean =
clientService.uploadImg(
request, file, mail, pass, Integer.valueOf(days.toString()));
return resultBean;
}
}
@@ -24,6 +24,7 @@ public class ExceptionHandling {
ModelAndView modelAndView = new ModelAndView("index");
Print.Normal("异常拦截成功:"+ ssie.getMessage());
modelAndView.addObject("error",ssie.getMessage());
//返回错误信息,并显示给用户
return modelAndView;
}
@@ -20,7 +20,7 @@ public class ImageReviewController {
private ImgreviewService imgreviewService;
@PostMapping("/updateimgReviewConfig")
@PostMapping("/updateimgReviewConfig") //new
@ResponseBody
public Msg updateimgReviewConfig(@RequestParam(value = "data", defaultValue = "") String data ) {
final Msg msg = new Msg();
@@ -1,14 +1,14 @@
package cn.hellohao.controller;
import cn.hellohao.auth.token.JWTUtil;
import cn.hellohao.config.GlobalConstant;
import cn.hellohao.pojo.*;
import cn.hellohao.service.*;
import cn.hellohao.service.impl.AlbumServiceImpl;
import cn.hellohao.service.impl.UploadServicel;
import cn.hellohao.service.impl.deleImages;
import cn.hellohao.utils.GetIPS;
import cn.hellohao.utils.MyVersion;
import cn.hellohao.utils.verifyCode.IVerifyCodeGen;
import cn.hellohao.utils.verifyCode.SimpleCharVerifyCodeGenImpl;
import cn.hellohao.utils.SetFiles;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ShearCaptcha;
import cn.hutool.captcha.generator.MathGenerator;
@@ -20,75 +20,129 @@ import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Controller
public class IndexController {
@Autowired
private ImgService imgService;
@Autowired
private SysConfigService sysConfigService;
@Autowired
private ConfigService configService;
@Autowired
private UploadConfigService uploadConfigService;
@Autowired
private UploadServicel uploadServicel;
@Autowired
private deleImages deleimages;
@Autowired
AlbumServiceImpl albumService;
@Autowired
AppClientService appClientService;
@Autowired private ImgService imgService;
@Autowired private SysConfigService sysConfigService;
@Autowired private ConfdataService confdataService;
@Autowired private UploadConfigService uploadConfigService;
@Autowired private UploadServicel uploadServicel;
@Autowired private deleImages deleimages;
@Autowired private IRedisService iRedisService;
@Autowired private AppClientService appClientService;
@RequestMapping(value = "/")
public String Welcome(Model model, HttpServletRequest httpServletRequest) {
model.addAttribute("name", "服务端程序(开源版)");
model.addAttribute("version", "20230320");
model.addAttribute("ip", GetIPS.getIpAddr(httpServletRequest));
model.addAttribute("links", "https://github.com/Hello-hao/tbed");
return "welcome";
}
@RequestMapping(value = "/webInfo")
@ResponseBody
public Msg webInfo() {
final Msg msg = new Msg();
Config config = configService.getSourceype();
Msg msg = new Msg();
final Confdata confdata = confdataService.selectConfdata("config");
JSONObject cd = JSONObject.parseObject(confdata.getJsondata());
UploadConfig updateConfig = uploadConfigService.getUpdateConfig();
SysConfig sysConfig = sysConfigService.getstate();
JSONObject jsonObject = new JSONObject();
AppClient appClient = appClientService.getAppClientData("app");
jsonObject.put("webname",config.getWebname());
jsonObject.put("websubtitle",config.getWebsubtitle());
jsonObject.put("keywords",config.getWebkeywords());
jsonObject.put("description",config.getWebms());
jsonObject.put("explain",config.getExplain());
jsonObject.put("favicon",config.getWebfavicons());
jsonObject.put("baidu",config.getBaidu());
jsonObject.put("links",config.getLinks());
jsonObject.put("aboutinfo",config.getAboutinfo());
jsonObject.put("logo",config.getLogo());
jsonObject.put("api",updateConfig.getApi());
jsonObject.put("register",sysConfig.getRegister());
jsonObject.put("isuse",appClient.getIsuse());
jsonObject.put("clientname",appClient.getAppname());
jsonObject.put("clientlogo",appClient.getApplogo());
jsonObject.put("appupdate",appClient.getAppupdate());
jsonObject.put("webname", cd.getString("webname"));
jsonObject.put("websubtitle", cd.getString("websubtitle"));
jsonObject.put("keywords", cd.getString("keywords"));
jsonObject.put("webms", cd.getString("webms"));
jsonObject.put("explain", cd.getString("explain"));
jsonObject.put("baidu", cd.getString("baidu"));
jsonObject.put("links", cd.getString("links"));
jsonObject.put("aboutinfo", cd.getString("aboutinfo"));
jsonObject.put("logo", cd.getString("logo"));
jsonObject.put("webfavicons", cd.getString("webfavicons"));
jsonObject.put("api", updateConfig.getApi());
jsonObject.put("register", sysConfig.getRegister());
jsonObject.put("isuse", appClient.getIsuse());
jsonObject.put("clientname", appClient.getAppname());
jsonObject.put("clientlogo", appClient.getApplogo());
jsonObject.put("appupdate", appClient.getAppupdate());
msg.setData(jsonObject);
return msg;
}
@PostMapping(value = {"/upload","/client/upload"})
@PostMapping("/uploadChunkFile")
@ResponseBody
public Msg upimg(HttpServletRequest request, @RequestParam(value = "file", required = false) MultipartFile multipartFile,Integer day) {
return uploadServicel.uploadForLoc(request,multipartFile,day,null);
@CrossOrigin
public Msg uploadChunk(HttpServletRequest request,Chunk chunk) {
Msg msg = new Msg();
MultipartFile file = chunk.getFile();
try {
byte[] bytes = file.getBytes();
Path path = Paths.get(SetFiles.generatePath(GlobalConstant.HELLOHAOTEMPIMG_PATH+ File.separator+chunk.getUuid(), chunk));
java.nio.file.Files.write(path, bytes);
JSONObject jsonObject = new JSONObject();
jsonObject.put("chunkNumber",chunk.getChunkNumber());
jsonObject.put("totalChunks",chunk.getTotalChunks());
msg.setData(jsonObject);
msg.setCode("200");
return msg;
} catch (IOException e) {
e.printStackTrace();
msg.setCode("500");
return msg;
}
}
@PostMapping(value = {"/uploadForUrl","/client/uploadForUrl"})
@PostMapping("/processFile")
@ResponseBody
public Msg upurlimg(HttpServletRequest request,@RequestParam(value = "data", defaultValue = "") String data) {
@CrossOrigin
public Msg processFile(HttpServletRequest request,@RequestParam(value = "data", defaultValue = "") String data){
Msg msg = new Msg();
try{
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
CompletableFuture<Msg> ret = uploadServicel.mergeFile(request,data,user);
msg = ret.get();
}catch (Exception e){
msg.setCode("500");
msg.setInfo("处理文件错误,上传失败");
}
return msg;
}
@PostMapping(value = {"/upload", "/client/upload"})
@ResponseBody
public Msg upimg(
HttpServletRequest request,
@RequestParam(value = "file", required = false) MultipartFile multipartFile,
Integer day,@RequestParam(value = "md5",required = false) String md5) {
JSONArray jsonArray = new JSONArray();
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
String originalFilename = multipartFile.getOriginalFilename();
if(StringUtils.isBlank(originalFilename)){
originalFilename = "未命名图像";
}
File file = SetFiles.changeFile_new(multipartFile);
return uploadServicel.uploadForLoc(request, file,originalFilename, day, null,md5);
}
@PostMapping(value = {"/uploadForUrl", "/client/uploadForUrl"})
@ResponseBody
public Msg upurlimg(
HttpServletRequest request, @RequestParam(value = "data", defaultValue = "") String data) {
JSONObject jsonObj = JSONObject.parseObject(data);
Integer setday = jsonObj.getInteger("day");
String imgUrl = jsonObj.getString("imgUrl");
@@ -98,9 +152,9 @@ public class IndexController {
User user = (User) subject.getPrincipal();
UploadConfig updateConfig = uploadConfigService.getUpdateConfig();
int syscounts = 0;
if(null==user){
if (null == user) {
syscounts = updateConfig.getImgcounttourists();
}else{
} else {
syscounts = updateConfig.getImgcountuser();
}
Msg retMsg = new Msg();
@@ -109,22 +163,22 @@ public class IndexController {
int errcounts = 0;
int excess = 0;
for (int i = 0; i < URLArr.length; i++) {
int temp = i+1;
if(syscounts>=temp){
Msg msg = uploadServicel.uploadForLoc(request, null, setday, URLArr[i]);
if(!msg.getCode().equals("200")){
int temp = i + 1;
if (syscounts >= temp) {
Msg msg = uploadServicel.uploadForLoc(request, null,"URL转存图像", setday, URLArr[i],null);
if (!msg.getCode().equals("200")) {
errcounts++;
}else{
} else {
retArray.add(msg);
}
}else{
} else {
excess++;
}
}
jsonObject.put("counts",URLArr.length);
jsonObject.put("errcounts",errcounts);
jsonObject.put("excess",excess);
jsonObject.put("urls",retArray);
jsonObject.put("counts", URLArr.length);
jsonObject.put("errcounts", errcounts);
jsonObject.put("excess", excess);
jsonObject.put("urls", retArray);
retMsg.setData(jsonObject);
return retMsg;
}
@@ -138,19 +192,19 @@ public class IndexController {
User user = (User) subject.getPrincipal();
try {
UploadConfig updateConfig = uploadConfigService.getUpdateConfig();
jsonObject.put("suffix",updateConfig.getSuffix().split(","));
if(null==user){
jsonObject.put("filesize",Integer.valueOf(updateConfig.getFilesizetourists())/1024);
jsonObject.put("imgcount",updateConfig.getImgcounttourists());
jsonObject.put("uploadSwitch",updateConfig.getIsupdate());
jsonObject.put("uploadInfo","您登陆后才能使用此功能哦");
}else{
jsonObject.put("filesize",Integer.valueOf(updateConfig.getFilesizeuser())/1024);
jsonObject.put("imgcount",updateConfig.getImgcountuser());
jsonObject.put("uploadSwitch",updateConfig.getUserclose());
jsonObject.put("uploadInfo","系统暂时关闭了用户上传功能");
jsonObject.put("suffix", updateConfig.getSuffix().split(","));
if (null == user) {
jsonObject.put("filesize", Integer.valueOf(updateConfig.getFilesizetourists()) / 1024);
jsonObject.put("imgcount", updateConfig.getImgcounttourists());
jsonObject.put("uploadSwitch", updateConfig.getIsupdate());
jsonObject.put("uploadInfo", "您登陆后才能使用此功能哦");
} else {
jsonObject.put("filesize", Integer.valueOf(updateConfig.getFilesizeuser()) / 1024);
jsonObject.put("imgcount", updateConfig.getImgcountuser());
jsonObject.put("uploadSwitch", updateConfig.getUserclose());
jsonObject.put("uploadInfo", "系统暂时关闭了用户上传功能");
}
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
}
msg.setData(jsonObject);
@@ -162,19 +216,21 @@ public class IndexController {
public Msg checkStatus(HttpServletRequest request) {
Msg msg = new Msg();
String token = request.getHeader("Authorization");
if(token != null) {
if (token != null) {
JSONObject tokenJson = JWTUtil.checkToken(token);
if(tokenJson.getBoolean("check")){
if (tokenJson.getBoolean("check")) {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken tokenOBJ = new UsernamePasswordToken(tokenJson.getString("email"),tokenJson.getString("password"));
UsernamePasswordToken tokenOBJ =
new UsernamePasswordToken(
tokenJson.getString("email"), tokenJson.getString("password"));
tokenOBJ.setRememberMe(true);
try {
subject.login(tokenOBJ);
SecurityUtils.getSubject().getSession().setTimeout(3600000);
User u = (User) subject.getPrincipal();
final JSONObject jsonObject = new JSONObject();
jsonObject.put("RoleLevel",u.getLevel()==2?"admin":"user");
jsonObject.put("userName",u.getUsername());
JSONObject jsonObject = new JSONObject();
jsonObject.put("RoleLevel", u.getLevel() == 2 ? "admin" : "user");
jsonObject.put("userName", u.getUsername());
msg.setCode("200");
msg.setData(jsonObject);
} catch (Exception e) {
@@ -183,119 +239,126 @@ public class IndexController {
System.err.println("登录失效,请重新登录");
e.printStackTrace();
}
}else{
} else {
msg.setCode("40041");
msg.setInfo("登录失效,请重新登录");
}
}else{
} else {
msg.setCode("40040");
msg.setInfo("当前未登录,请先登录");
}
return msg;
}
@GetMapping("/verifyCode")
public void verifyCode(HttpServletRequest request, HttpServletResponse response,HttpSession httpSession) {
IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl();
@PostMapping("/verifyCode")
@ResponseBody
public Msg verifyCode() {
Msg msg = new Msg();
try {
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(90, 35, 2, 2);
captcha.setGenerator(new MathGenerator(1));
httpSession.setAttribute("_hellohao_verifyCode",captcha);
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
captcha.write(response.getOutputStream());
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
httpSession.removeAttribute("_hellohao_verifyCode");
timer.cancel();
}
},5*60*1000);
response.getOutputStream().flush();
} catch (IOException e) {
String code = getVerifyCodeOperator(captcha.getCode());
String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
iRedisService.setValue("verifyCode_" + uid, code);
JSONObject jsonObject = new JSONObject();
jsonObject.put("codeKey", uid);
jsonObject.put("codeImg", captcha.getImageBase64());
msg.setData(jsonObject);
return msg;
} catch (Exception e) {
e.printStackTrace();
msg.setCode("500");
return msg;
}
}
@GetMapping("/verifyCodeForRegister")
public void verifyCodeForRegister(HttpServletRequest request, HttpServletResponse response,HttpSession httpSession) {
IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl();
@PostMapping("/verifyCodeForRegister")
@ResponseBody
public Msg verifyCodeForRegister() {
Msg msg = new Msg();
try {
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(90, 35, 2, 2);
httpSession.setAttribute("_hellohao_verifyCodeForRegister",captcha);
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
captcha.write(response.getOutputStream());
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
httpSession.removeAttribute("_hellohao_verifyCodeForRegister");
timer.cancel();
}
},5*60*1000);
response.getOutputStream().flush();
} catch (IOException e) {
captcha.setGenerator(new MathGenerator(1));
String code = getVerifyCodeOperator(captcha.getCode());
String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
iRedisService.setValue("verifyCodeForRegister_" + uid, code);
JSONObject jsonObject = new JSONObject();
jsonObject.put("codeKey", uid);
jsonObject.put("codeImg", captcha.getImageBase64());
msg.setData(jsonObject);
return msg;
} catch (Exception e) {
e.printStackTrace();
msg.setCode("500");
return msg;
}
}
@GetMapping("/verifyCodeForRetrieve")
public void verifyCodeForRetrieve(HttpServletRequest request, HttpServletResponse response,HttpSession httpSession) {
IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl();
@PostMapping("/verifyCodeForRetrieve")
@ResponseBody
public Msg verifyCodeForRetrieve() {
Msg msg = new Msg();
try {
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(90, 35, 2, 2);
httpSession.setAttribute("_hellohao_verifyCodeForEmailRetrieve",captcha);
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
captcha.write(response.getOutputStream());
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
httpSession.removeAttribute("_hellohao_verifyCodeForEmailRetrieve");
timer.cancel();
}
},5*60*1000);
response.getOutputStream().flush();
} catch (IOException e) {
captcha.setGenerator(new MathGenerator(1));
String code = getVerifyCodeOperator(captcha.getCode());
String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
iRedisService.setValue("verifyCodeForRetrieve_" + uid, code);
JSONObject jsonObject = new JSONObject();
jsonObject.put("codeKey", uid);
jsonObject.put("codeImg", captcha.getImageBase64());
msg.setData(jsonObject);
return msg;
} catch (Exception e) {
e.printStackTrace();
msg.setCode("500");
return msg;
}
}
@PostMapping({"/deleImagesByUid","/client/deleImagesByUid"})
public static String getVerifyCodeOperator(String str) {
int a = Integer.valueOf(str.substring(0, 1));
String yxf = str.substring(1, 2);
int b = Integer.valueOf(str.substring(2, 3));
switch (yxf) {
case "*":
return Integer.toString(a * b);
case "+":
return Integer.toString(a + b);
case ",":
default:
return Integer.toString(82);
case "-":
return Integer.toString(a - b);
}
}
@PostMapping({"/deleImagesByUid", "/client/deleImagesByUid"})
@ResponseBody
public Msg deleImagesByUid(@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
JSONObject jsonObj = JSONObject.parseObject(data);
String imguid = jsonObj.getString("imguid");
Images image = imgService.selectImgUrlByImgUID(imguid);
if(null==image){
if (null == image) {
msg.setInfo("图像已不存在,删除成功");
return msg;
}
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
if(null!=user){
if(!user.getId().equals(image.getUserid())){
if (null != user) {
if (!user.getId().equals(image.getUserid())) {
msg.setInfo("删除失败,该图片不允许你执行操作");
msg.setCode("100403");
return msg;
}
}
msg = deleimages.dele(null,image.getId());
List<Long> Delids = (List<Long>)msg.getData();
if(!Delids.contains(image.getId())){
msg = deleimages.dele(null, image.getId());
List<Long> Delids = (List<Long>) msg.getData();
if (!Delids.contains(image.getId())) {
msg.setCode("500");
msg.setInfo("图像删除失败");
}else{
} else {
msg.setCode("200");
msg.setInfo("图像已成功删除");
}
@@ -311,26 +374,25 @@ public class IndexController {
JSONObject jsonObj = JSONObject.parseObject(data);
String appv = jsonObj.getString("version");
AppClient app = appClientService.getAppClientData("app");
if(!StringUtils.isBlank(app.getAppupdate())){
String version = app.getAppupdate().replaceAll("\\.","");
if(MyVersion.compareVersion(app.getAppupdate(),appv)==1){
if (!StringUtils.isBlank(app.getAppupdate())) {
String version = app.getAppupdate().replaceAll("\\.", "");
if (MyVersion.compareVersion(app.getAppupdate(), appv) == 1) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("winpackurl",app.getWinpackurl());
jsonObject.put("macpackurl",app.getMacpackurl());
jsonObject.put("winpackurl", app.getWinpackurl());
jsonObject.put("macpackurl", app.getMacpackurl());
msg.setCode("200");
msg.setData(jsonObject);
}
}
}catch (Exception e){
} catch (Exception e) {
msg.setCode("000");
}
return msg;
}
@RequestMapping("/authError")
@ResponseBody
public Msg authError(HttpServletRequest request){
public Msg authError(HttpServletRequest request) {
Msg msg = new Msg();
msg.setCode("4031");
msg.setInfo("You don't have authority");
@@ -339,13 +401,10 @@ public class IndexController {
@RequestMapping("/jurisError")
@ResponseBody
public Msg jurisError(HttpServletRequest request){
public Msg jurisError(HttpServletRequest request) {
Msg msg = new Msg();
msg.setCode("4031");
msg.setInfo("Authentication request failed");
return msg;
}
}
@@ -5,8 +5,10 @@ import cn.hellohao.auth.token.JWTUtil;
import cn.hellohao.config.SysName;
import cn.hellohao.pojo.*;
import cn.hellohao.service.*;
import cn.hellohao.utils.*;
import cn.hutool.captcha.ShearCaptcha;
import cn.hellohao.utils.Base64Encryption;
import cn.hellohao.utils.NewSendEmail;
import cn.hellohao.utils.Print;
import cn.hellohao.utils.SetText;
import cn.hutool.core.util.HexUtil;
import com.alibaba.fastjson.JSONObject;
import org.apache.shiro.SecurityUtils;
@@ -35,7 +37,7 @@ public class UserController {
@Autowired
private EmailConfigService emailConfigService;
@Autowired
private ConfigService configService;
private ConfdataService confdataService;
@Autowired
private UploadConfigService uploadConfigService;
@Autowired
@@ -45,21 +47,23 @@ public class UserController {
@PostMapping("/register")
@ResponseBody
public Msg Register(HttpSession httpSession, @RequestParam(value = "data", defaultValue = "") String data) {//Validated
public Msg Register(HttpServletRequest httpServletRequest, @RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
JSONObject jsonObj = JSONObject.parseObject(data);
String username = jsonObj.getString("username");
String email = jsonObj.getString("email");
String password = Base64Encryption.encryptBASE64(jsonObj.getString("password").getBytes());
String verifyCodeForRegister = jsonObj.getString("verifyCode");
ShearCaptcha redis_verifyCodeForRegister = (ShearCaptcha) httpSession.getAttribute("_hellohao_verifyCodeForRegister");//iRedisService.getValue(userIP+"_verifyCodeForRegister");
Object redis_verifyCodeForRegister = iRedisService.getValue("verifyCodeForRegister_"+httpServletRequest.getHeader("verifyCodeForRegister"));
if(!SetText.checkEmail(email)){
//邮箱格式不正确
msg.setCode("110403");
msg.setInfo("邮箱格式不正确");
return msg;
}
String regex = "^\\w+$";
if(username.length()>20 || !username.matches (regex)){
//用户名格式不正确
msg.setCode("110403");
msg.setInfo("用户名不得超过20位字符");
return msg;
@@ -73,7 +77,7 @@ public class UserController {
msg.setInfo("验证码不能为空。");
return msg;
}
if(redis_verifyCodeForRegister.verify(verifyCodeForRegister.toLowerCase())){
if((redis_verifyCodeForRegister.toString().toLowerCase()).compareTo((verifyCodeForRegister.toLowerCase()))==0){
User user = new User();
UploadConfig updateConfig = uploadConfigService.getUpdateConfig();
EmailConfig emailConfig = emailConfigService.getemail();
@@ -97,7 +101,7 @@ public class UserController {
}
String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String birthder = df.format(new Date());
String birthder = df.format(new Date());// new Date()为获取当前系统时间
user.setLevel(1);
user.setUid(uid);
user.setBirthder(birthder);
@@ -106,38 +110,54 @@ public class UserController {
user.setEmail(email);
user.setUsername(username);
user.setPassword(password);
Config config = configService.getSourceype();
user.setToken(UUID.randomUUID().toString().replace("-", ""));
final Confdata confdata = confdataService.selectConfdata("config");
JSONObject jsonObject = JSONObject.parseObject(confdata.getJsondata());
Integer type = 0;
if(emailConfig.getUsing()==1){
user.setIsok(0);
//注册完发激活链接
Thread thread = new Thread() {
public void run() {
Integer a = NewSendEmail.sendEmail(emailConfig,user.getUsername(), uid, user.getEmail(),config);
Integer a = NewSendEmail.sendEmail(emailConfig,user.getUsername(), uid, user.getEmail(),jsonObject);
}
};
thread.start();
msg.setInfo("注册成功,请注意查收邮箱尽快激活账户");
}else{
//直接注册
user.setIsok(1);
msg.setInfo("注册成功,快去登陆吧");
}
userService.register(user);
}else{
msg.setCode("110408");
msg.setInfo("验证码不正确");
msg.setInfo("验证码不正确");//失效也要处理。
}
return msg;
}
@PostMapping("/login")
@PostMapping("/login")//new
@ResponseBody
public Msg login(HttpServletRequest request,HttpSession httpSession,@RequestParam(value = "data", defaultValue = "") String data) {
public Msg login(HttpServletRequest httpServletRequest,@RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
JSONObject jsonObj = JSONObject.parseObject(data);
String email = jsonObj.getString("email");
String password = Base64Encryption.encryptBASE64(jsonObj.getString("password").getBytes());
String verifyCode = jsonObj.getString("verifyCode");
ShearCaptcha redis_VerifyCode = (ShearCaptcha)httpSession.getAttribute("_hellohao_verifyCode");
if(null == email || null == password || null == verifyCode){
msg.setCode("5000");
msg.setInfo("登录信息不正确");
return msg;
}
if(email.replace(" ","").equals("") || password.replace(" ","").equals("")
|| verifyCode.replace(" ","").equals("")){
msg.setCode("5000");
msg.setInfo("登录信息不正确");
return msg;
}
Object redis_VerifyCode = iRedisService.getValue("verifyCode_"+httpServletRequest.getHeader("verifyCode"));
if(null==redis_VerifyCode){
msg.setCode("4035");
msg.setInfo("验证码已失效,请重新弄获取。");
@@ -147,13 +167,13 @@ public class UserController {
msg.setInfo("验证码不能为空。");
return msg;
}
if(redis_VerifyCode.verify(verifyCode.toLowerCase())){
if((redis_VerifyCode.toString().toLowerCase()).compareTo((verifyCode.toLowerCase()))==0){
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken tokenOBJ = new UsernamePasswordToken(email,password);
tokenOBJ.setRememberMe(true);
try {
subject.login(tokenOBJ);
SecurityUtils.getSubject().getSession().setTimeout(3600000);//一小时
SecurityUtils.getSubject().getSession().setTimeout(3600000);
JSONObject jsonObject = new JSONObject();
User user = (User) SecurityUtils.getSubject().getPrincipal();
if(user.getIsok()==0){
@@ -176,6 +196,7 @@ public class UserController {
msg.setData(jsonObject);
return msg;
} catch (UnknownAccountException e) {
//此异常说明用户名不存在
msg.setCode("4000");
msg.setInfo("登录邮箱不存在");
System.err.println("邮箱不存在");
@@ -196,7 +217,7 @@ public class UserController {
}
}else{
msg.setCode("40034");
msg.setInfo("验证码不正确");//失效也要处理。
msg.setInfo("验证码不正确");
}
return msg;
}
@@ -204,7 +225,6 @@ public class UserController {
@RequestMapping(value = "/activation", method = RequestMethod.GET)
public String activation(Model model, HttpServletRequest request, HttpSession session, String activation, String username) {
Config config = configService.getSourceype();
Integer ret = 0;
User u2 = new User();
u2.setUid(activation);
@@ -224,7 +244,7 @@ public class UserController {
}
}
@PostMapping(value = "/logout")
@PostMapping(value = "/logout")//new
@ResponseBody
public Msg exit(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session) {
Msg msg = new Msg();
@@ -237,13 +257,13 @@ public class UserController {
@PostMapping("/retrievePass")
@ResponseBody
public Msg retrievePass(HttpServletRequest request,HttpSession httpSession, @RequestParam(value = "data", defaultValue = "") String data) {
public Msg retrievePass(HttpServletRequest httpServletRequest, @RequestParam(value = "data", defaultValue = "") String data) {
Msg msg = new Msg();
try {
JSONObject jsonObj = JSONObject.parseObject(data);
String email = jsonObj.getString("email");
String retrieveCode = jsonObj.getString("retrieveCode");
ShearCaptcha redis_verifyCodeForEmailRetrieve =(ShearCaptcha) httpSession.getAttribute("_hellohao_verifyCodeForEmailRetrieve");// iRedisService.getValue(userIP+"_verifyCodeForEmailRetrieve");
Object redis_verifyCodeForEmailRetrieve =iRedisService.getValue("verifyCodeForRetrieve_"+httpServletRequest.getHeader("verifyCodeForRetrieve"));
EmailConfig emailConfig = emailConfigService.getemail();
if(null==redis_verifyCodeForEmailRetrieve){
msg.setCode("4035");
@@ -254,12 +274,11 @@ public class UserController {
msg.setInfo("验证码不能为空。");
return msg;
}
if(!redis_verifyCodeForEmailRetrieve.verify(retrieveCode.toLowerCase())){
if((redis_verifyCodeForEmailRetrieve.toString().toLowerCase()).compareTo((retrieveCode.toLowerCase()))!=0){
msg.setCode("40034");
msg.setInfo("验证码不正确");
return msg;
}
Integer ret = userService.countmail(email);
if(ret>0){
if(emailConfig.getUsing()==1){
@@ -271,10 +290,11 @@ public class UserController {
msg.setInfo("当前用户已被冻结,禁止操作");
return msg;
}
Config config = configService.getSourceype();
final Confdata confdata = confdataService.selectConfdata("config");
JSONObject jsonObject = JSONObject.parseObject(confdata.getJsondata());
Thread thread = new Thread() {
public void run() {
Integer a = NewSendEmail.sendEmailFindPass(emailConfig,user.getUsername(), user.getUid(), user.getEmail(),config);//SendEmail.sendEmailT(message, user.getUsername(), user.getUid(), user.getEmail(),emailConfig,config);
Integer a = NewSendEmail.sendEmailFindPass(emailConfig,user.getUsername(), user.getUid(), user.getEmail(),jsonObject);
}
};
thread.start();
@@ -0,0 +1,11 @@
package cn.hellohao.dao;
import cn.hellohao.pojo.Confdata;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface ConfdataMapper {
Confdata selectConfdata(@Param("key") String key);
Integer updateConfdata(Confdata confdata);
}
@@ -1,11 +0,0 @@
package cn.hellohao.dao;
import cn.hellohao.pojo.Config;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Service;
@Mapper
public interface ConfigMapper {
Config getSourceype();
Integer setSourceype(Config config);
}
+8 -7
View File
@@ -1,32 +1,33 @@
package cn.hellohao.dao;
import java.util.List;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import cn.hellohao.pojo.Images;
import java.util.List;
@Mapper
public interface ImgMapper {
List<Images> selectimg(Images images);
Integer insertImgData(Images images);
Integer countimg(@Param("userid") Integer userid);
Integer deleimg(@Param("id") Integer id);
Integer deleimg(@Param("id") Long id);
Integer deleimgForImgUid(@Param("imguid") String imguid);
Images selectByPrimaryKey(@Param("id") Integer id);
Images selectByPrimaryKey(@Param("id") Long id);
Integer counts(@Param("userid") Integer userid);
Integer setImg(Images images);
Integer deleimgname(@Param("imgname") String imgname);
Integer deleall(@Param("id") Integer id);
Integer deleall(@Param("id") Long id);
List<Images> gettimeimg(@Param("time") String time);
@@ -36,7 +37,7 @@ public interface ImgMapper {
Integer md5Count(Images images);
List<Images> selectImgUrlByMD5(@Param("md5key") String md5key);
List<Images> selectImgUrlByMD5(Images images);
List<Images> RecentlyUploaded(@Param("userid") Integer userid);
@@ -1,11 +1,9 @@
package cn.hellohao.dao;
import cn.hellohao.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.User;
import java.util.List;
@Mapper
@@ -14,7 +12,6 @@ public interface UserMapper {
Integer login(@Param("email") String email, @Param("password") String password,@Param("uid") String uid);
User getUsers(User user);
User loginByToken (@Param("token") String token);
Integer insertimg(Images img);
Integer change(User user);
Integer changeUser(User user);
Integer checkUsername(@Param("username") String username);
+70
View File
@@ -0,0 +1,70 @@
package cn.hellohao.pojo;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
@Data
public class Chunk implements Serializable {
@Id
private String uid;
/**
* 当前文件块,从1开始
*/
private Integer chunkNumber;
/**
* 分块大小
*/
private Long chunkSize;
/**
* 当前分块大小
*/
private Long currentChunkSize;
/**
* 总大小
*/
private Long totalSize;
/**
* 文件标识
*/
private String identifier;
/**
* 文件名
*/
private String filename;
/**
* 相对路径
*/
private String relativePath;
/**
* 总块数
*/
private Integer totalChunks;
/**
* 文件类型
*/
private String type;
/**
* 前台创建的随机UID,用作创建合并文件的唯一标识目录名
*/
private String uuid;
/**
* 归类
*/
private String classifications;
/**
* 天数
*/
private Integer day;
@Transient
private MultipartFile file;
}
@@ -0,0 +1,16 @@
package cn.hellohao.pojo;
import lombok.Data;
/**
* @author Hellohao
* @version 1.0
* @date 2023/3/2 10:21
*/
@Data
public class Confdata {
private String key;
private String jsondata;
}
-223
View File
@@ -1,223 +0,0 @@
package cn.hellohao.pojo;
public class Config {
private Integer id;
private Integer sourcekey;
private Integer emails;
private String webname;
private String explain;
private String video;
private Integer backtype;
private String links;
private String notice;
private String baidu;
private String domain;
private String background1;
private String background2;
private String sett;
private String webms;
private String webkeywords;
private String webfavicons;
private Integer theme;
private String websubtitle;
private String logo;
private String aboutinfo;
public Config() {
}
public Config(Integer id, Integer sourcekey, Integer emails, String webname, String explain, String video, Integer backtype,
String links, String notice, String baidu, String domain, String background1, String background2, String sett,
String webms, String webkeywords, String webfavicons, Integer theme,String websubtitle,String logo,String aboutinfo) {
this.id = id;
this.sourcekey = sourcekey;
this.emails = emails;
this.webname = webname;
this.explain = explain;
this.video = video;
this.backtype = backtype;
this.links = links;
this.notice = notice;
this.baidu = baidu;
this.domain = domain;
this.background1 = background1;
this.background2 = background2;
this.sett = sett;
this.webms = webms;
this.webkeywords = webkeywords;
this.webfavicons = webfavicons;
this.theme = theme;
this.websubtitle = websubtitle;
this.logo = logo;
this.aboutinfo = aboutinfo;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getSourcekey() {
return sourcekey;
}
public void setSourcekey(Integer sourcekey) {
this.sourcekey = sourcekey;
}
public Integer getEmails() {
return emails;
}
public void setEmails(Integer emails) {
this.emails = emails;
}
public String getWebname() {
return webname;
}
public void setWebname(String webname) {
this.webname = webname;
}
public String getExplain() {
return explain;
}
public void setExplain(String explain) {
this.explain = explain;
}
public String getVideo() {
return video;
}
public void setVideo(String video) {
this.video = video;
}
public Integer getBacktype() {
return backtype;
}
public void setBacktype(Integer backtype) {
this.backtype = backtype;
}
public String getLinks() {
return links;
}
public void setLinks(String links) {
this.links = links;
}
public String getNotice() {
return notice;
}
public void setNotice(String notice) {
this.notice = notice;
}
public String getBaidu() {
return baidu;
}
public void setBaidu(String baidu) {
this.baidu = baidu;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getBackground1() {
return background1;
}
public void setBackground1(String background1) {
this.background1 = background1;
}
public String getBackground2() {
return background2;
}
public void setBackground2(String background2) {
this.background2 = background2;
}
public String getSett() {
return sett;
}
public void setSett(String sett) {
this.sett = sett;
}
public String getWebms() {
return webms;
}
public void setWebms(String webms) {
this.webms = webms;
}
public String getWebkeywords() {
return webkeywords;
}
public void setWebkeywords(String webkeywords) {
this.webkeywords = webkeywords;
}
public String getWebfavicons() {
return webfavicons;
}
public void setWebfavicons(String webfavicons) {
this.webfavicons = webfavicons;
}
public Integer getTheme() {
return theme;
}
public void setTheme(Integer theme) {
this.theme = theme;
}
public String getWebsubtitle() {
return websubtitle;
}
public void setWebsubtitle(String websubtitle) {
this.websubtitle = websubtitle;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
public String getAboutinfo() {
return aboutinfo;
}
public void setAboutinfo(String aboutinfo) {
this.aboutinfo = aboutinfo;
}
}
+26 -7
View File
@@ -4,7 +4,7 @@ public class Images {
// 默认的时间字符串格式
//id, imgname, imgurl, userid
private Integer id;
private Long id;
private String imgname;
private String imgurl;
private Integer userid;
@@ -35,8 +35,9 @@ public class Images {
private String yyyy;
private String[] classifuidlist; //类别uid集合
private String classificationuid; //类别uid集合
private String idname;
private Integer isRepeat;//如果没有开启查重的时候他是0,开启为1
private String searchname;
public Images() {
super();
@@ -52,11 +53,12 @@ public class Images {
this.imguid = imguid;
}
public Images(Integer id, String imgname, String imgurl, Integer userid, String sizes, String abnormal, Integer source,
public Images(Long id, String imgname, String imgurl, Integer userid, String sizes, String abnormal, Integer source,
Integer imgtype, String updatetime, String username, Integer storageType, String starttime, String stoptime,
String explains, String md5key, String notes, String useridlist, String imguid, String albumtitle,
String password, Integer selecttype,Long countNum,Integer monthNum,String yyyy,
String format,String about,Integer great,String[] classifuidlist,String classificationuid,String violation,String idname) {
String format,String about,Integer great,String[] classifuidlist,String classificationuid,String violation,
String idname,Integer isRepeat,String searchname) {
this.id = id;
this.imgname = imgname;
this.imgurl = imgurl;
@@ -88,14 +90,15 @@ public class Images {
this.classificationuid = classificationuid;
this.violation = violation;
this.idname = idname;
this.isRepeat = isRepeat;
this.searchname = searchname;
}
public Integer getId() {
public Long getId() {
return id;
}
public void setId(Integer id) {
public void setId(Long id) {
this.id = id;
}
@@ -339,6 +342,22 @@ public class Images {
public void setIdname(String idname) {
this.idname = idname;
}
public Integer getIsRepeat() {
return isRepeat;
}
public void setIsRepeat(Integer isRepeat) {
this.isRepeat = isRepeat;
}
public String getSearchname() {
return searchname;
}
public void setSearchname(String searchname) {
this.searchname = searchname;
}
}
+5 -81
View File
@@ -1,94 +1,18 @@
package cn.hellohao.pojo;
import lombok.Data;
@Data
public class Keys {
private Integer id;
private String AccessKey;
private String AccessSecret;
private String Endpoint;
private String Region;
private String Bucketname;
private String RequestAddress;
private Integer storageType;
private String keyname;
private String RootPath;//存入的目录
public Keys() {
super();
}
public Keys(Integer id, String accessKey, String accessSecret, String endpoint, String bucketname,
String requestAddress, Integer storageType,String keyname) {
super();
this.id = id;
this.AccessKey = accessKey;
this.AccessSecret = accessSecret;
this.Endpoint = endpoint;
this.Bucketname = bucketname;
this.RequestAddress = requestAddress;
this.storageType = storageType;
this.keyname = keyname;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAccessKey() {
return AccessKey;
}
public void setAccessKey(String accessKey) {
AccessKey = accessKey;
}
public String getAccessSecret() {
return AccessSecret;
}
public void setAccessSecret(String accessSecret) {
AccessSecret = accessSecret;
}
public String getEndpoint() {
return Endpoint;
}
public void setEndpoint(String endpoint) {
Endpoint = endpoint;
}
public String getBucketname() {
return Bucketname;
}
public void setBucketname(String bucketname) {
Bucketname = bucketname;
}
public String getRequestAddress() {
return RequestAddress;
}
public void setRequestAddress(String requestAddress) {
RequestAddress = requestAddress;
}
public Integer getStorageType() {
return storageType;
}
public void setStorageType(Integer storageType) {
this.storageType = storageType;
}
public String getKeyname() {
return keyname;
}
public void setKeyname(String keyname) {
this.keyname = keyname;
}
}
@@ -32,9 +32,9 @@ public class FirstJob {
@Autowired
private USSImageupload ussImageupload;
@Autowired
private UFileImageupload uFileImageupload;
private S3Imageupload s3Imageupload;
@Autowired
private FTPImageupload ftpImageupload;
private FtpServiceImpl ftpService;
@Autowired
ImgTempService imgTempService;
@Autowired
@@ -75,9 +75,9 @@ public class FirstJob {
}else if(keys.getStorageType()==6){
firstJob.cosImageupload.delCOS(keys.getId(),images);
}else if(keys.getStorageType()==7){
firstJob.ftpImageupload.delFTP(keys.getId(), images);
firstJob.ftpService.delFTP(keys.getId(), images);
}else if(keys.getStorageType()==8){
firstJob.uFileImageupload.delUFile(keys.getId(), images);
firstJob.s3Imageupload.deleS3(keys.getId(), images);
}else{
System.err.println("未获取到对象存储参数,上传失败。");
}
@@ -0,0 +1,10 @@
package cn.hellohao.service;
import cn.hellohao.pojo.Confdata;
import org.springframework.stereotype.Service;
@Service
public interface ConfdataService {
Confdata selectConfdata(String key);
Integer updateConfdata(Confdata confdata);
}
@@ -1,10 +0,0 @@
package cn.hellohao.service;
import cn.hellohao.pojo.Config;
import org.springframework.stereotype.Service;
@Service
public interface ConfigService {
Config getSourceype();
Integer setSourceype(Config config);
}
@@ -4,14 +4,16 @@ import java.util.Map;
public interface IRedisService {
// 加入元素
void setValue(String key, Map<String, Object> value);
// 加入元素
void setValue(String key, String value);
// 加入元素
void setValue(String key, Object value);
// 获取元素
Object getMapValue(String key);
// 获取元素
Object getValue(String key);
}
// 加入元素
void setValue(String key, Map<String, Object> value);
// 加入元素
void setValue(String key, String value);
// 加入元素
void setTimeValue(String key, Object value,Long time);
// 获取元素
Object getMapValue(String key);
// 获取元素
Object getValue(String key);
// 删除某个值
Boolean removeValue(String key);
}
@@ -1,25 +1,25 @@
package cn.hellohao.service;
import java.util.List;
import cn.hellohao.pojo.User;
import org.apache.ibatis.annotations.Param;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.User;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface ImgService {
List<Images> selectimg(Images images);
Integer deleimg(Integer id);
Integer insertImgData(Images images);
Integer deleimg(Long id);
Integer deleimgForImgUid(String imguid);
Integer countimg(Integer userid);
Images selectByPrimaryKey(Integer id);
Images selectByPrimaryKey(Long id);
Integer counts(Integer userid);
@@ -27,7 +27,7 @@ public interface ImgService {
Integer deleimgname(String imgname);
Integer deleall(Integer id);
Integer deleall(Long id);
List<Images> gettimeimg(String time);
@@ -37,7 +37,7 @@ public interface ImgService {
Integer md5Count(Images images);
List<Images> selectImgUrlByMD5(String md5key);
List<Images> selectImgUrlByMD5(Images images);
List<Images> RecentlyUploaded(Integer userid);
@@ -1,6 +1,5 @@
package cn.hellohao.service;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.User;
import org.springframework.stereotype.Service;
@@ -16,8 +15,6 @@ public interface UserService {
User getUsers(User user);
Integer insertimg(Images img);
Integer change(User user);
Integer changeUser(User user);
@@ -1,23 +1,19 @@
package cn.hellohao.service.impl;
import cn.hellohao.dao.AlbumMapper;
import cn.hellohao.dao.ConfigMapper;
import cn.hellohao.dao.ImgAndAlbumMapper;
import cn.hellohao.dao.ImgMapper;
import cn.hellohao.exception.CodeException;
import cn.hellohao.pojo.Album;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.ImgAndAlbum;
import cn.hellohao.pojo.Msg;
import cn.hellohao.service.AlbumService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
/**
* @author Hellohao
@@ -26,92 +22,85 @@ import java.util.UUID;
*/
@Service
public class AlbumServiceImpl implements AlbumService {
@Autowired
AlbumMapper albumMapper;
@Autowired
ImgAndAlbumMapper andAlbumMapper;
@Autowired
ConfigMapper configMapper;
@Autowired
ImgMapper imgMapper;
@Autowired AlbumMapper albumMapper;
@Autowired ImgAndAlbumMapper andAlbumMapper;
@Autowired ImgMapper imgMapper;
@Override
public JSONArray getAlbumList(JSONArray array) {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < array.size(); i++) {
Images images = new Images();
images.setImguid(array.getString(i));
jsonArray.add(imgMapper.selectimg(images).get(0));
}
return jsonArray;
@Override
public JSONArray getAlbumList(JSONArray array) {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < array.size(); i++) {
Images images = new Images();
images.setImguid(array.getString(i));
jsonArray.add(imgMapper.selectimg(images).get(0));
}
return jsonArray;
}
@Override
public Album selectAlbum(Album album) {
return albumMapper.selectAlbum(album);
@Override
public Album selectAlbum(Album album) {
return albumMapper.selectAlbum(album);
}
@Override
public Integer addAlbum(Album album) {
return albumMapper.addAlbum(album);
}
@Transactional
public Integer addAlbumForImgAndAlbumMapper(ImgAndAlbum imgAndAlbum) {
Integer tem = 0;
Integer r2 = andAlbumMapper.addImgAndAlbum(imgAndAlbum);
if (r2 > 0) {
tem = 1;
} else {
throw new CodeException("插入画廊数据失败,回滚");
}
return tem;
}
@Override
public Integer addAlbum(Album album) {
return albumMapper.addAlbum(album);
@Override
public Integer deleteAlbum(String albumkey) {
return albumMapper.deleteAlbum(albumkey);
}
@Override
public List<Album> selectAlbumURLList(Album album) {
return albumMapper.selectAlbumURLList(album);
}
@Override
public Integer selectAlbumCount(Integer userid) {
return albumMapper.selectAlbumCount(userid);
}
@Override
public Integer updateAlbum(Album album) {
return albumMapper.updateAlbum(album);
}
@Transactional
public Integer delete(String albumkey) {
Integer ret1 = albumMapper.deleteAlbum(albumkey);
if (ret1 > 0) {
ret1 = andAlbumMapper.deleteImgAndAlbumForKey(albumkey);
} else {
throw new CodeException("删除画廊失败。");
}
return ret1;
}
@Transactional
public Integer addAlbumForImgAndAlbumMapper(ImgAndAlbum imgAndAlbum) {
Integer tem = 0;
Integer r2 = andAlbumMapper.addImgAndAlbum(imgAndAlbum);
if(r2>0){
tem = 1;
}else{
throw new CodeException("插入画廊数据失败,回滚");
}
return tem;
@Transactional
public Integer deleteAll(String[] albumkeyArr) {
Integer ret1 = 0;
for (String s : albumkeyArr) {
ret1 = albumMapper.deleteAlbum(s);
if (ret1 > 0) {
ret1 = andAlbumMapper.deleteImgAndAlbumForKey(s);
} else {
throw new CodeException("删除画廊失败。");
}
}
@Override
public Integer deleteAlbum(String albumkey) {
return albumMapper.deleteAlbum(albumkey);
}
@Override
public List<Album> selectAlbumURLList(Album album) {
return albumMapper.selectAlbumURLList(album);
}
@Override
public Integer selectAlbumCount(Integer userid) {
return albumMapper.selectAlbumCount(userid);
}
@Override
public Integer updateAlbum(Album album) {
return albumMapper.updateAlbum(album);
}
@Transactional
public Integer delete(String albumkey) {
Integer ret1 = albumMapper.deleteAlbum(albumkey);
if(ret1>0){
ret1 = andAlbumMapper.deleteImgAndAlbumForKey(albumkey);
}else{
throw new CodeException("删除画廊失败。");
}
return ret1;
}
@Transactional
public Integer deleteAll(String[] albumkeyArr) {
Integer ret1 = 0 ;
for (String s : albumkeyArr) {
ret1 = albumMapper.deleteAlbum(s);
if(ret1>0){
ret1 = andAlbumMapper.deleteImgAndAlbumForKey(s);
}else{
throw new CodeException("删除画廊失败。");
}
}
return ret1;
}
return ret1;
}
}
@@ -3,42 +3,43 @@ package cn.hellohao.service.impl;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.utils.*;
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.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.model.*;
import com.qcloud.cos.model.ListObjectsRequest;
import com.qcloud.cos.model.ObjectListing;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.*;
import java.util.Map;
@Service
public class COSImageupload {
static COSClient cosClient;
static Keys key;
public ReturnImage ImageuploadCOS(Map<String, File> fileMap, String username,Integer keyID) {
public ReturnImage ImageuploadCOS(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
File file = null;
Map<ReturnImage, Integer> ImgUrl = new HashMap<>();
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
try {
String bucketName = key.getBucketname();
String userkey =username + "/" + ShortUID + "." + entry.getKey();
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, userkey, file);
String userkey = username + "/" + ShortUIDName + "." + prefix;
PutObjectRequest putObjectRequest =
new PutObjectRequest(bucketName, userkey, file);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
returnImage.setImgname(userkey);
returnImage.setImgurl(key.getRequestAddress() + "/" + userkey);
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
} catch (CosServiceException serverException) {
returnImage.setCode("400");
serverException.printStackTrace();
@@ -47,41 +48,42 @@ public class COSImageupload {
clientException.printStackTrace();
}
}
}catch(Exception e){
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
return returnImage;
}
public static Integer Initialize(Keys k) {
int ret = -1;
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
if (!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("")) {
String secretId = k.getAccessKey();
String secretKey = k.getAccessSecret();
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
Region region = new Region(k.getEndpoint());
ClientConfig clientConfig = new ClientConfig(region);
COSClient cos = new COSClient(cred, clientConfig);
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
listObjectsRequest.setBucketName(k.getBucketname());
listObjectsRequest.setDelimiter("/");
listObjectsRequest.setMaxKeys(1);
ObjectListing objectListing = null;
try {
objectListing = cos.listObjects(listObjectsRequest);
ret = 1;
cosClient = cos;
key = k;
} catch (Exception e) {
System.out.println("COS Object Is null");
ret = -1;
}
}
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getBucketname())
|| StringUtils.isBlank(k.getRequestAddress())) {
return -1;
}
String secretId = k.getAccessKey();
String secretKey = k.getAccessSecret();
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
Region region = new Region(k.getEndpoint());
ClientConfig clientConfig = new ClientConfig(region);
COSClient cos = new COSClient(cred, clientConfig);
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
listObjectsRequest.setBucketName(k.getBucketname());
listObjectsRequest.setDelimiter("/");
listObjectsRequest.setMaxKeys(1);
ObjectListing objectListing = null;
try {
objectListing = cos.listObjects(listObjectsRequest);
ret = 1;
cosClient = cos;
key = k;
} catch (Exception e) {
System.out.println("COS Object Is null");
ret = -1;
}
return ret;
}
@@ -94,10 +96,6 @@ public class COSImageupload {
e.printStackTrace();
b = false;
}
return b ;
return b;
}
}
@@ -2,16 +2,18 @@ package cn.hellohao.service.impl;
import cn.hellohao.dao.*;
import cn.hellohao.pojo.*;
import cn.hellohao.service.ConfdataService;
import cn.hellohao.service.ImgTempService;
import cn.hellohao.service.SysConfigService;
import cn.hellohao.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baidu.aip.contentcensor.AipContentCensor;
import com.baidu.aip.contentcensor.EImgType;
import org.apache.commons.codec.digest.DigestUtils;
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 javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
@@ -25,30 +27,29 @@ import java.util.*;
*/
@Service
public class ClientService {
private static Logger logger = LoggerFactory.getLogger(ClientService.class);
@Autowired
ConfdataService confdataService;
@Autowired
SysConfigService sysConfigService;
@Autowired private UserMapper userMapper;
@Autowired private KeysMapper keysMapper;
@Autowired private UploadConfigMapper uploadConfigMapper;
@Autowired private ImgServiceImpl imgServiceImpl;
@Autowired private ImgTempService imgTempService;
@Autowired private GetSource getSource;
@Autowired private ImgViolationJudgeServiceImpl imgViolationJudgeService;
@Autowired
private SysConfigService sysConfigService;
@Autowired
private UserMapper userMapper;
@Autowired
private KeysMapper keysMapper;
@Autowired
private ConfigMapper configMapper;
@Autowired
private UploadConfigMapper uploadConfigMapper;
@Autowired
private ImgMapper imgMapper;
@Autowired
ImgreviewMapper imgreviewMapper;
public Msg uploadImg(HttpServletRequest request, MultipartFile multipartFile, String email, String pass ){
public Msg uploadImg(
HttpServletRequest request, MultipartFile multipartFile, String email, String pass,Integer setday) {
Msg msg = new Msg();
try {
Confdata dataJson = confdataService.selectConfdata("config");
JSONObject confdata = JSONObject.parseObject(dataJson.getJsondata());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String imageFileName = "未命名图像";
Integer sourceKeyId = 0;
FileInputStream fis = null;
String md5key = null;
Integer setday = 0;
JSONObject jsonObject = new JSONObject();
String userip = GetIPS.getIpAddr(request);
UploadConfig uploadConfig = uploadConfigMapper.getUpdateConfig();
@@ -57,6 +58,7 @@ public class ClientService {
msg.setInfo("管理员关闭了API接口");
return msg;
}
imageFileName = multipartFile.getOriginalFilename();
File file = SetFiles.changeFile_new(multipartFile);
User u2 = new User();
if (!file.exists() || email == null || pass == null) {
@@ -92,12 +94,20 @@ public class ClientService {
msg.setInfo("图像超出系统限制大小");
return msg;
}
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
md5key = DigestUtils.md5Hex(fis);
} catch (Exception e) {
e.printStackTrace();
System.out.println("未获取到图片的MD5,成成UUID");
}finally{
try {
if (null != fis)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Msg fileMiME = TypeDict.FileMiME(file);
if (!fileMiME.getCode().equals("200")) {
@@ -119,57 +129,60 @@ public class ClientService {
}
}
}
if(Integer.valueOf(sysConfigService.getstate().getCheckduplicate())==1) {
Images imaOBJ = new Images();
imaOBJ.setMd5key(md5key);
imaOBJ.setUserid(u.getId());
if (imgMapper.md5Count(imaOBJ) > 0) {
List<Images> images = imgMapper.selectImgUrlByMD5(md5key);
jsonObject.put("url", images.get(0).getImgurl());
jsonObject.put("name", file.getName());
jsonObject.put("size", images.get(0).getSizes());
msg.setData(jsonObject);
return msg;
}
}
Map<String, File> map = new HashMap<>();
Images imgObj = new Images();
String imgnameEd = null;
Map<Map<String, String>, File> map = new HashMap<>();
if (file.exists()) {
map.put(prefix, file);
Map<String, String> m1 = new HashMap<>();
String shortUuid_y = SetText.getShortUuid();
m1.put("prefix", prefix);
m1.put("name", shortUuid_y);
map.put(m1, file);
imgnameEd = updatePath + "/" + shortUuid_y + "." + prefix;
imgObj.setImgname(imgnameEd);
if (key.getStorageType().equals(5)) {
imgObj.setImgurl(key.getRequestAddress() + "/ota/" + imgnameEd);
} else {
imgObj.setImgurl(key.getRequestAddress() + "/" + imgnameEd);
}
imgObj.setSizes(Long.toString(file.length()));
}else{
msg.setInfo("未获取到指定图像:110503");
msg.setCode("110503");
return msg;
}
imgObj.setUpdatetime(df.format(new Date()));
imgObj.setSource(key.getId());
imgObj.setUserid(u == null ? 0 : u.getId());
if (setday == 1 || setday == 3 || setday == 7 || setday == 30) {
imgObj.setImgtype(1);
ImgTemp imgDataExp = new ImgTemp();
imgDataExp.setDeltime(UploadServicel.plusDay(setday));
imgDataExp.setImguid(imguid);
imgTempService.insertImgExp(imgDataExp);
} else {
imgObj.setImgtype(0);
}
imgObj.setAbnormal(userip);
imgObj.setMd5key(md5key);
imgObj.setImguid(imguid);
imgObj.setFormat(fileMiME.getData().toString());
imgObj.setIdname(imageFileName);
Msg insertRet = imgServiceImpl.insertImgDataForCheck(imgObj,u,confdata,file.getName());
if (insertRet.getCode().equals("000")) {
return insertRet;
}
long stime = System.currentTimeMillis();
Map<ReturnImage, Integer> m = null;
ReturnImage returnImage = GetSource.storageSource(key.getStorageType(), map, updatePath, key.getId());
Images img = new Images();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ReturnImage returnImage = getSource.storageSource(key.getStorageType(), map, updatePath, key.getId());
if (returnImage.getCode().equals("200")) {
String imgurl = returnImage.getImgurl();
Long imgsize = returnImage.getImgSize();
String imgname = returnImage.getImgname();
img.setImgurl(imgurl);
img.setUpdatetime(df.format(new Date()));
img.setSource(key.getId());
img.setUserid(u == null ? 0 : u.getId());
img.setSizes(imgsize.toString());
if (uploadConfig.getUrltype() == 2) {
img.setImgname(imgname);
} else {
img.setImgname(SetText.getSubString(imgname, key.getRequestAddress() + "/", ""));
}
img.setImgtype(setday > 0 ? 1 : 0);
img.setAbnormal(userip);
img.setMd5key(md5key);
img.setImguid(imguid);
img.setFormat(fileMiME.getData().toString());
userMapper.insertimg(img);
long etime = System.currentTimeMillis();
Print.Normal("上传图片所用总时长:" + String.valueOf(etime - stime) + "ms");
jsonObject.put("url", img.getImgurl());
jsonObject.put("name", imgname);
jsonObject.put("size", img.getSizes());
new Thread(() -> {
LegalImageCheck(img);
}).start();
logger.info("上传图片所用总时长:" + String.valueOf(etime - stime) + "ms");
jsonObject.put("url", imgObj.getImgurl());
jsonObject.put("name", imgObj.getImgname());
jsonObject.put("size", imgObj.getSizes());
imgViolationJudgeService.LegalImageCheck(imgObj,key);
} else {
imgServiceImpl.deleimgForImgUid(imgObj.getImguid());
msg.setCode("5001");
msg.setInfo("上传服务内部错误");
return msg;
@@ -177,53 +190,55 @@ public class ClientService {
file.delete();
msg.setData(jsonObject);
return msg;
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
msg.setCode("5001");
msg.setInfo("Error for server:500");
return msg;
}
}
public static Group group;
public static Long memory;
public static Long TotleMemory;
public static Long UsedTotleMemory;
public static String updatePath = "tourist";
public static Group group; //上传用户或游客的所属分组
public static Long memory;//上传用户或者游客的分配容量 memory
public static Long TotleMemory;//用户或者游客下可使用的总容量 //maxsize
public static Long UsedTotleMemory;//用户或者游客已经用掉的总容量 //usermemory
public static String updatePath="tourist";
//判断用户 或 游客 当前上传图片的一系列校验
private Msg updateImgCheck(User user, UploadConfig uploadConfig){
final Msg msg = new Msg();
private Msg updateImgCheck(User user, UploadConfig uploadConfig) {
Msg msg = new Msg();
java.text.DateFormat dateFormat = null;
try {
dateFormat = new SimpleDateFormat("yyyy/MM/dd");
if (user == null) {
//用户没有登陆,值判断游客能不能上传即可
if(uploadConfig.getIsupdate()!=1){
if (uploadConfig.getIsupdate() != 1) {
msg.setCode("1000");
msg.setInfo("系统已禁用游客上传");
return msg;
}
group = GetCurrentSource.GetSource(null);
memory = Long.valueOf(uploadConfig.getVisitormemory());//单位 B 游客设置总量
TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists());//单位 B 游客单文件大小
UsedTotleMemory = imgMapper.getusermemory(0)==null?0L : imgMapper.getusermemory(0);//单位 B
memory = Long.valueOf(uploadConfig.getVisitormemory()); // 单位 B 游客设置总量
TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists()); // 单位 B 游客单文件大小
UsedTotleMemory =
imgServiceImpl.getusermemory(0) == null
? 0L
: imgServiceImpl.getusermemory(0); // 单位 B
} else {
//判断用户能不能上传
if(uploadConfig.getUserclose()!=1){
// 判断用户能不能上传
if (uploadConfig.getUserclose() != 1) {
msg.setCode("1001");
msg.setInfo("系统已禁用上传功能");
return msg;
}
updatePath = user.getUsername();
group= GetCurrentSource.GetSource(user.getId());
memory = Long.valueOf(user.getMemory());//单位 B
TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser());//单位 B
UsedTotleMemory = imgMapper.getusermemory(user.getId())==null?0L:imgMapper.getusermemory(user.getId());//单位 B
group = GetCurrentSource.GetSource(user.getId());
memory = Long.valueOf(user.getMemory()); // 单位 B
TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser()); // 单位 B
UsedTotleMemory =
imgServiceImpl.getusermemory(user.getId()) == null
? 0L
: imgServiceImpl.getusermemory(user.getId()); // 单位 B
}
//判断上传的图片目录结构类型
// 判断上传的图片目录结构类型
if (uploadConfig.getUrltype() == 2) {
updatePath = dateFormat.format(new Date());
}
@@ -235,62 +250,4 @@ public class ClientService {
return msg;
}
//图片鉴黄
private synchronized void LegalImageCheck(Images images){
System.out.println("非法图像鉴别进程启动");
Imgreview imgreview = null;
try {
imgreview = imgreviewMapper.selectByusing(1);
} catch (Exception e) {
Print.warning("获取鉴别程序的时候发生错误");
e.printStackTrace();
}
LegalImageCheckForBaiDu(imgreview,images);
}
private void LegalImageCheckForBaiDu(Imgreview imgreview,Images images){
if(imgreview.getUsing()==1){
try {
AipContentCensor client = new AipContentCensor(imgreview.getAppId(), imgreview.getApiKey(), imgreview.getSecretKey());
client.setConnectionTimeoutInMillis(5000);
client.setSocketTimeoutInMillis(30000);
org.json.JSONObject res = client.antiPorn(images.getImgurl());
res = client.imageCensorUserDefined(images.getImgurl(), EImgType.URL, null);
com.alibaba.fastjson.JSONArray jsonArray = JSON.parseArray("[" + res.toString() + "]");
for (Object o : jsonArray) {
JSONObject jsonObject = (JSONObject) o;
com.alibaba.fastjson.JSONArray data = jsonObject.getJSONArray("data");
Integer conclusionType = jsonObject.getInteger("conclusionType");
if(conclusionType!=null){
if (conclusionType == 2) {
for (Object datum : data) {
JSONObject imgdata = (JSONObject) datum;
if (imgdata.getInteger("type") == 1) {
Images img = new Images();
img.setImgname(images.getImgname());
img.setViolation("1[1]");
imgMapper.setImg(img);
Imgreview imgv = new Imgreview();
imgv.setId(1);
Integer count = imgreview.getCount();
System.out.println("违法图片总数:" + count);
imgv.setCount(count + 1);
imgreviewMapper.updateByPrimaryKeySelective(imgv);
System.err.println("存在非法图片,进行处理操作");
}
}
}
}
}
}catch (Exception e){
System.out.println("图像鉴黄线程执行过程中出现异常");
e.printStackTrace();
}
}
}
}
@@ -0,0 +1,23 @@
package cn.hellohao.service.impl;
import cn.hellohao.dao.ConfdataMapper;
import cn.hellohao.pojo.Confdata;
import cn.hellohao.service.ConfdataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ConfdataServiceImpl implements ConfdataService {
@Autowired
private ConfdataMapper confdataMapper;
@Override
public Confdata selectConfdata(String key) {
return confdataMapper.selectConfdata(key);
}
@Override
public Integer updateConfdata(Confdata confdata) {
return confdataMapper.updateConfdata(confdata);
}
}
@@ -1,24 +0,0 @@
package cn.hellohao.service.impl;
import cn.hellohao.dao.ConfigMapper;
import cn.hellohao.pojo.Config;
import cn.hellohao.pojo.Images;
import cn.hellohao.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ConfigServiceImpl implements ConfigService {
@Autowired
private ConfigMapper configMapper;
@Override
public Config getSourceype() {
return configMapper.getSourceype();
}
@Override
public Integer setSourceype(Config config) {
return configMapper.setSourceype(config);
}
}
@@ -1,131 +0,0 @@
package cn.hellohao.service.impl;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.utils.FTPUtils;
import cn.hellohao.utils.Print;
import cn.hellohao.utils.SetText;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Service
public class FTPImageupload {
static Keys key;
public ReturnImage ImageuploadFTP(Map<String, File> fileMap, String username,Integer keyID) {
ReturnImage returnImage = new ReturnImage();
String[] host = key.getEndpoint().split("\\:");
String h = host[0];
Integer p = Integer.parseInt(host[1]);
FTPUtils ftps = new FTPUtils(h, p, key.getAccessKey(), key.getAccessSecret());
boolean flag = ftps.open();
File file = null;
Map<ReturnImage, Integer> ImgUrl = new HashMap<>();
ftps.mkDir(File.separator+username);
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
file = entry.getValue();
String userkey =username + "/"+ ShortUID + "." + entry.getKey();
if (flag) {
boolean isUpload = ftps.upload(file, "/" + userkey, "");
if(isUpload){
returnImage.setImgname(userkey);
returnImage.setImgurl(key.getRequestAddress() + "/"+ userkey);
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
}else{
returnImage.setCode("500");
}
}
Print.Normal("要上传的文件路径:/"+userkey);
}
}catch (Exception e){
e.printStackTrace();
returnImage.setCode("500");
}
return returnImage;
}
public static Integer Initialize(Keys k) {
int ret = -1;
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null && k.getRequestAddress()!=null ) {
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("") && !k.getRequestAddress().equals("") ) {
FTPClient ftp = new FTPClient();
ftp.setConnectTimeout(0);
int flag = k.getEndpoint().indexOf(":");
if(flag>0){
String[] host = k.getEndpoint().split("\\:");
String h = host[0];
Integer p = Integer.parseInt(host[1]);
try {
if(!ftp.isConnected()){
ftp.connect(h,p);
}
ftp.login(k.getAccessKey(), k.getAccessSecret());
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
System.out.println("FTP Object Is null");
ftp.disconnect();
return -1;
}
ret = 1;
key = k;
} catch (IOException e) {
System.out.println("FTP Object Is null");
return -1;
}
}
}
}
return ret;
}
public static void fuzhi(String p1,String p2){
String a=p1;
try{
File afile=new File(a);
File bfile=new File(p2);//定义一个复制后的文件路径
bfile.createNewFile();
FileInputStream c=new FileInputStream(afile);
FileOutputStream d=new FileOutputStream(bfile);
byte[] date=new byte[512];
int i=0;
while((i=c.read(date))>0){
d.write(date);
}
c.close();
d.close();
System.out.println("文件复制成功");}
catch(IOException e){
e.printStackTrace();
}
}
public Boolean delFTP(Integer keyID, Images images) {
boolean b = true;
try {
String[] host = key.getEndpoint().split("\\:");
String h = host[0];
Integer p = Integer.parseInt(host[1]);
//创建FTP客户端,所有的操作都基于FTPClinet
FTPUtils ftps = new FTPUtils(h, p, key.getAccessKey(), key.getAccessSecret());
ftps.open();
b = ftps.deleteFile(images.getImgname());
} catch (Exception e) {
e.printStackTrace();
b = false;
}
return b;
}
}
@@ -0,0 +1,107 @@
package cn.hellohao.service.impl;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.ReturnImage;
import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ftp.FtpMode;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.springframework.stereotype.Service;
import java.io.File;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@Service
public class FtpServiceImpl {
private Keys key;
public static int Initialize(Keys k) {
int ret = -1;
try{
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getRequestAddress())){
return -1;
}
Charset charset = StandardCharsets.UTF_8;//Charset.forName("UTF-8");
String[] hostArr = k.getEndpoint().split("\\:");
String host = hostArr[0];
Integer port = Integer.parseInt(hostArr[1]);
Ftp ftp = new Ftp(host, port, k.getAccessKey(), k.getAccessSecret(), charset);
ftp.getClient().type(FTP.BINARY_FILE_TYPE);
ftp.setMode(FtpMode.Passive);
return 1;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
public ReturnImage FtpUploadFile(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
Ftp ftp = null;
try {
if (null == key) {
System.out.println("FTP = 存储源对象为空");
returnImage.setCode("500");
return returnImage;
}
Charset charset = StandardCharsets.UTF_8;//Charset.forName("UTF-8");
String[] hostArr = key.getEndpoint().split("\\:");
String host = hostArr[0];
Integer port = Integer.parseInt(hostArr[1]);
ftp = new Ftp(host, port, key.getAccessKey(), key.getAccessSecret(), charset);
ftp.getClient().type(FTP.BINARY_FILE_TYPE);
ftp.setMode(FtpMode.Passive);
} catch (Exception e) {
e.printStackTrace();
System.out.println("FTP = 存储源对象为空");
returnImage.setCode("500");
return returnImage;
}
File file = null;
try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
boolean isUpload = ftp.upload(
"/" + username,
ShortUIDName + "." + prefix,
file);
if (!isUpload) {
returnImage.setCode("400");
}
}
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
return returnImage;
}
public Boolean delFTP(Integer keyID, Images images) {
boolean b = true;
Ftp ftp = null;
try {
Charset charset = StandardCharsets.UTF_8;//Charset.forName("UTF-8");
String[] hostArr = key.getEndpoint().split("\\:");
String host = hostArr[0];
Integer port = Integer.parseInt(hostArr[1]);
ftp = new Ftp(host, port, key.getAccessKey(), key.getAccessSecret(), charset);
b = ftp.delFile(images.getImgname());
} catch (Exception e) {
e.printStackTrace();
b = false;
}
return b;
}
}
@@ -1,11 +1,16 @@
package cn.hellohao.service.impl;
import cn.hellohao.dao.ImgMapper;
import cn.hellohao.dao.SysConfigMapper;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Msg;
import cn.hellohao.pojo.SysConfig;
import cn.hellohao.pojo.User;
import cn.hellohao.service.ImgService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -13,7 +18,8 @@ import java.util.List;
public class ImgServiceImpl implements ImgService {
@Autowired
private ImgMapper imgMapper;
@Autowired
SysConfigMapper sysConfigMapper;
@Override
public List<Images> selectimg(Images images) {
// TODO Auto-generated method stub
@@ -21,7 +27,12 @@ public class ImgServiceImpl implements ImgService {
}
@Override
public Integer deleimg(Integer id) {
public Integer insertImgData(Images images) {
return imgMapper.insertImgData(images);
}
@Override
public Integer deleimg(Long id) {
// TODO Auto-generated method stub
return imgMapper.deleimg(id);
}
@@ -31,7 +42,7 @@ public class ImgServiceImpl implements ImgService {
return imgMapper.deleimgForImgUid(imguid);
}
public Images selectByPrimaryKey(Integer id) {
public Images selectByPrimaryKey(Long id) {
return imgMapper.selectByPrimaryKey(id);
}
@@ -58,7 +69,7 @@ public class ImgServiceImpl implements ImgService {
}
@Override
public Integer deleall(Integer id) {
public Integer deleall(Long id) {
return imgMapper.deleall(id);
}
@@ -83,8 +94,8 @@ public class ImgServiceImpl implements ImgService {
}
@Override
public List<Images> selectImgUrlByMD5(String md5key) {
return imgMapper.selectImgUrlByMD5(md5key);
public List<Images> selectImgUrlByMD5(Images images) {
return imgMapper.selectImgUrlByMD5(images);
}
@Override
@@ -112,4 +123,38 @@ public class ImgServiceImpl implements ImgService {
return imgMapper.selectImgUrlByImgUID(imguid);
}
@Transactional
public Msg insertImgDataForCheck(Images images, User user, JSONObject confdata, String flilename)throws Exception {
Msg msg = new Msg();
JSONObject jsonObject = new JSONObject();
SysConfig sysConfig = sysConfigMapper.getstate();
if(sysConfig.getCheckduplicate().equals("1")){
//查重
Images img = new Images();
img.setUserid(user.getId());
img.setMd5key(images.getMd5key());
List<Images> list = imgMapper.selectImgUrlByMD5(img);
jsonObject.put("url", list.get(0).getImgurl());
if (list.size() > 0) {
jsonObject.put("url", list.get(0).getImgurl());
jsonObject.put("name", flilename);
jsonObject.put("imguid", list.get(0).getImguid());
System.err.println(jsonObject.toJSONString());
msg.setData(jsonObject);
msg.setCode("000");
return msg;
}else{
imgMapper.insertImgData(images);
msg.setCode("200");
return msg;
}
}else{
//不查重
imgMapper.insertImgData(images);
msg.setCode("200");
}
return msg;
}
}
@@ -0,0 +1,116 @@
package cn.hellohao.service.impl;
import cn.hellohao.dao.ImgMapper;
import cn.hellohao.dao.ImgreviewMapper;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Imgreview;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.Msg;
import cn.hellohao.utils.FirstRun;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baidu.aip.contentcensor.AipContentCensor;
import com.baidu.aip.contentcensor.EImgType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ImgViolationJudgeServiceImpl {
private static Logger logger = LoggerFactory.getLogger(FirstRun.class);
@Autowired
ImgreviewServiceImpl imgreviewService;
@Autowired ImgMapper imgMapper;
@Autowired deleImages deleimages;
@Autowired private ImgreviewMapper imgreviewMapper;
//synchronized
@Async("taskExecutor")
public void LegalImageCheck(Images images, Keys keys) {
Imgreview imgreview = null;
try {
imgreview = imgreviewService.selectByusing(1);
} catch (Exception e) {
logger.error("获取鉴别程序的时候发生错误");
e.printStackTrace();
}
// 判断哪个鉴别平台
if (null != imgreview) {
LegalImageCheckForBaiDu(imgreview, images, keys);
}
}
private void LegalImageCheckForBaiDu(Imgreview imgreview, Images images, Keys keys) {
// Imgreview imgreview = imgreviewService.selectByPrimaryKey(1);
if (imgreview.getUsing() == 1) {
logger.info("非法图像鉴别进程启动-BaiDu");
try {
AipContentCensor client =
new AipContentCensor(
imgreview.getAppId(),
imgreview.getApiKey(),
imgreview.getSecretKey());
client.setConnectionTimeoutInMillis(5000);
client.setSocketTimeoutInMillis(30000);
// res = client.antiPorn(images.getImgurl());
org.json.JSONObject res = client.imageCensorUserDefined(images.getImgurl(), EImgType.URL, null);
logger.info("返回的鉴黄json:" + res.toString());
com.alibaba.fastjson.JSONArray jsonArray =
JSON.parseArray("[" + res.toString() + "]");
for (Object o : jsonArray) {
JSONObject jsonObject =
(JSONObject) o;
com.alibaba.fastjson.JSONArray data = jsonObject.getJSONArray("data");
Integer conclusionType = jsonObject.getInteger("conclusionType");
if (conclusionType != null) {
if (conclusionType == 2) {
// 1:合规,2:不合规,3:疑似,4:审核失败
for (Object datum : data) {
JSONObject imgdata =
(JSONObject) datum;
if (imgdata.getInteger("type") == 1) {
logger.info("存在非法图片,进行处理操作");
// type参数
// 0:百度官方违禁图库、1:色情识别、2:暴恐识别、3:恶心图识别、4:广告检测、5:政治敏感识别、6:图像质量检测、7:用户图像黑名单、8:用户图像白名单、10:用户头像审核、11:百度官方违禁词库、12:图文审核、13:自定义文本黑名单、14:自定义文本白名单、15:EasyDL自定义模型、16:敏感旗帜标志识别、21:不良场景识别、24:直播场景审核
// 存在非法图片,进行处理操作
Images img = new Images();
img.setImgname(images.getImgname());
img.setViolation("1[1]"); // 数字是鉴别平台的主键ID,括号是非法的类型,参考上面的注释
imgMapper.setImg(img);
// 计入总数
Imgreview imgv = new Imgreview();
imgv.setId(1);
Integer count = imgreview.getCount();
imgv.setCount(count + 1);
imgreviewMapper.updateByPrimaryKeySelective(imgv);
Images imgObj =
imgMapper.selectImgUrlByImgUID(images.getImguid());
Msg dele = deleimages.dele2(Long.toString(imgObj.getId()));
List<Long> ids = (List<Long>) dele.getData();
if (!ids.contains(imgObj.getId())) {
logger.error("检测到违规图像,但是数据库删除失败");
}
}
}
}
}
}
} catch (Exception e) {
logger.error("图像鉴黄线程执行过程中出现异常");
e.printStackTrace();
}
}
}
}
@@ -4,6 +4,8 @@ import cn.hellohao.auth.filter.SubjectFilter;
import cn.hellohao.dao.KeysMapper;
import cn.hellohao.pojo.Keys;
import cn.hellohao.utils.Print;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
@@ -23,6 +25,7 @@ import java.util.List;
@Order(2)
public class InitializationStorage implements CommandLineRunner {
private static Logger logger = LoggerFactory.getLogger(InitializationStorage.class);
@Value("${CROS_ALLOWED_ORIGINS}")
private String allowedOrigins;
@@ -30,7 +33,7 @@ public class InitializationStorage implements CommandLineRunner {
private KeysMapper keysMapper;
@Override
public void run(String... args) throws Exception {
public void run(String... args) {
SubjectFilter.WEBHOST = allowedOrigins;
String name = ManagementFactory.getRuntimeMXBean().getName();
String pid = name.split("@")[0];
@@ -41,21 +44,20 @@ public class InitializationStorage implements CommandLineRunner {
List<Keys> keylist = keysMapper.getKeys();
for (Keys key : keylist) {
if(key.getStorageType()!=0 && key.getStorageType()!=null){
int ret =0;
if(key.getStorageType()==1){
ret =NOSImageupload.Initialize(key);
NOSImageupload.Initialize(key);
}else if (key.getStorageType()==2){
ret =OSSImageupload.Initialize(key);
OSSImageupload.Initialize(key);
}else if(key.getStorageType()==3){
ret = USSImageupload.Initialize(key);
USSImageupload.Initialize(key);
}else if(key.getStorageType()==4){
ret = KODOImageupload.Initialize(key);
KODOImageupload.Initialize(key);
}else if(key.getStorageType()==6){
ret = COSImageupload.Initialize(key);
COSImageupload.Initialize(key);
}else if(key.getStorageType()==7){
ret = FTPImageupload.Initialize(key);
FtpServiceImpl.Initialize(key);
}else if(key.getStorageType()==8){
ret = UFileImageupload.Initialize(key);
S3Imageupload.Initialize(key);
}
}
}
@@ -1,13 +1,8 @@
package cn.hellohao.service.impl;
import cn.hellohao.config.GlobalConstant;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.pojo.UploadConfig;
import cn.hellohao.utils.*;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
@@ -18,14 +13,11 @@ import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Service
public class KODOImageupload {
@@ -33,7 +25,8 @@ public class KODOImageupload {
static BucketManager bucketManager;
static Keys key;
public ReturnImage ImageuploadKODO(Map<String, File> fileMap, String username, Integer keyID){
public ReturnImage ImageuploadKODO(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
Configuration cfg;
if (key.getEndpoint().equals("1")) {
@@ -49,19 +42,20 @@ public class KODOImageupload {
}
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(key.getAccessKey(), key.getAccessSecret());
String upToken = auth.uploadToken(key.getBucketname(),null,7200,null);
String upToken = auth.uploadToken(key.getBucketname(), null, 7200, null);
File file = null;
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
try {
Response response = uploadManager.put(file,username + "/" + ShortUID + "." + entry.getKey(),upToken);
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
returnImage.setImgname(username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
Response response =
uploadManager.put(
file, username + "/" + ShortUIDName + "." + prefix, upToken);
DefaultPutRet putRet =
new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
} catch (QiniuException ex) {
returnImage.setCode("400");
Response r = ex.response;
@@ -72,7 +66,8 @@ public class KODOImageupload {
}
}
}
}catch (Exception e){
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
@@ -81,40 +76,46 @@ public class KODOImageupload {
public static Integer Initialize(Keys k) {
int ret = -1;
if (k.getEndpoint() != null && k.getAccessSecret() != null && k.getEndpoint() != null
&& k.getBucketname() != null && k.getRequestAddress() != null) {
if (!k.getEndpoint().equals("") && !k.getAccessSecret() .equals("") && !k.getEndpoint() .equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress() .equals("")) {
Configuration cfg;
if (k.getEndpoint().equals("1")) {
cfg = new Configuration(Zone.zone0());
} else if (k.getEndpoint().equals("2")) {
cfg = new Configuration(Zone.zone1());
} else if (k.getEndpoint().equals("3")) {
cfg = new Configuration(Zone.zone2());
} else if (k.getEndpoint().equals("4")) {
cfg = new Configuration(Zone.zoneNa0());
} else {
cfg = new Configuration(Zone.zoneAs0());
}
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(k.getAccessKey(), k.getAccessSecret());
String upToken = auth.uploadToken(k.getBucketname(),null,7200,null);//auth.uploadToken(k.getBucketname());
BucketManager bmObj = new BucketManager(auth, cfg);
BucketManager.FileListIterator fileListIterator = null;
try {
fileListIterator = bmObj.createFileListIterator(k.getBucketname(), "", 1, "/");
FileInfo[] items = fileListIterator.next();
if(items!=null){
ret = 1;
bucketManager = bmObj;
key = k;
}
}catch (Exception e){
System.out.println("KODO Object Is null");
ret = -1;
}
if (org.apache.commons.lang3.StringUtils.isBlank(k.getAccessKey())
|| org.apache.commons.lang3.StringUtils.isBlank(k.getAccessSecret())
|| org.apache.commons.lang3.StringUtils.isBlank(k.getEndpoint())
|| org.apache.commons.lang3.StringUtils.isBlank(k.getBucketname())
|| StringUtils.isBlank(k.getRequestAddress())) {
return -1;
}
Configuration cfg;
if (k.getEndpoint().equals("1")) {
cfg = new Configuration(Zone.zone0());
} else if (k.getEndpoint().equals("2")) {
cfg = new Configuration(Zone.zone1());
} else if (k.getEndpoint().equals("3")) {
cfg = new Configuration(Zone.zone2());
} else if (k.getEndpoint().equals("4")) {
cfg = new Configuration(Zone.zoneNa0());
} else {
cfg = new Configuration(Zone.zoneAs0());
}
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(k.getAccessKey(), k.getAccessSecret());
String upToken =
auth.uploadToken(
k.getBucketname(),
null,
7200,
null); // auth.uploadToken(k.getBucketname());
BucketManager bmObj = new BucketManager(auth, cfg);
BucketManager.FileListIterator fileListIterator = null;
try {
fileListIterator = bmObj.createFileListIterator(k.getBucketname(), "", 1, "/");
FileInfo[] items = fileListIterator.next();
if (items != null) {
ret = 1;
bucketManager = bmObj;
key = k;
}
} catch (Exception e) {
System.out.println("KODO Object Is null");
ret = -1;
}
return ret;
}
@@ -128,6 +129,4 @@ public class KODOImageupload {
}
return b;
}
}
@@ -16,7 +16,6 @@ public class KeysServiceImpl implements KeysService {
@Autowired
private KeysMapper keysMapper;
@Autowired
private NOSImageupload nOSImageupload;
@Autowired
@@ -28,9 +27,9 @@ public class KeysServiceImpl implements KeysService {
@Autowired
private COSImageupload cosImageupload;
@Autowired
private FTPImageupload ftpImageupload;
private FtpServiceImpl ftpService;
@Autowired
private UFileImageupload uFileImageupload;
private S3Imageupload s3Imageupload;
@Override
@@ -65,9 +64,9 @@ public class KeysServiceImpl implements KeysService {
}else if(key.getStorageType()==6){
ret = cosImageupload.Initialize(key);
}else if(key.getStorageType()==7){
ret = ftpImageupload.Initialize(key);
ret = ftpService.Initialize(key);
}else if(key.getStorageType()==8){
ret = uFileImageupload.Initialize(key);
ret = s3Imageupload.Initialize(key);
}else{
Print.Normal("为获取到存储参数,或者使用存储源是本地的。");
}
@@ -8,6 +8,7 @@ import com.netease.cloud.auth.BasicCredentials;
import com.netease.cloud.auth.Credentials;
import com.netease.cloud.services.nos.NosClient;
import com.netease.cloud.services.nos.model.ObjectListing;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.io.File;
@@ -18,20 +19,19 @@ public class NOSImageupload {
static NosClient nosClient;
static Keys key;
public ReturnImage Imageupload(Map<String, File> fileMap, String username,Integer keyID){
public ReturnImage Imageupload(Map<Map<String, String>, File> fileMap, String username,Integer keyID){
ReturnImage returnImage = new ReturnImage();
File file = null;
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
nosClient.putObject(key.getBucketname(), username + "/" + ShortUID+ "." + entry.getKey(), file);
returnImage.setImgname(username + "/" + ShortUID+ "." + entry.getKey());
returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
nosClient.putObject(
key.getBucketname(), username + "/" + ShortUIDName + "." + prefix, file);
}
}catch (Exception e){
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
@@ -42,25 +42,25 @@ public class NOSImageupload {
public static Integer Initialize(Keys k) {
int ret = -1;
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ){
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ){
// 初始化
Credentials credentials = new BasicCredentials(k.getAccessKey(), k.getAccessSecret());
NosClient nosObj = new NosClient(credentials);
nosObj.setEndpoint(k.getEndpoint());
ObjectListing objectListing = null;
try {
objectListing = nosObj.listObjects(k.getBucketname());
ret = 1;
nosClient = nosObj;
key = k;
}catch (Exception e){
System.out.println("NOS Object Is null");
ret = -1;
}
}
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getBucketname())
|| StringUtils.isBlank(k.getRequestAddress())) {
return -1;
}
Credentials credentials = new BasicCredentials(k.getAccessKey(), k.getAccessSecret());
NosClient nosObj = new NosClient(credentials);
nosObj.setEndpoint(k.getEndpoint());
ObjectListing objectListing = null;
try {
objectListing = nosObj.listObjects(k.getBucketname());
ret = 1;
nosClient = nosObj;
key = k;
}catch (Exception e){
System.out.println("NOS Object Is null");
ret = -1;
}
return ret;
}
@@ -4,12 +4,13 @@ import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.Msg;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.utils.SetText;
import cn.hellohao.utils.TypeDict;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.io.File;
@@ -20,57 +21,63 @@ public class OSSImageupload {
static OSS ossClient;
static Keys key;
public ReturnImage ImageuploadOSS(Map<String, File> fileMap, String username,Integer keyID){
public ReturnImage ImageuploadOSS(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
File file = null;
ObjectMetadata meta = new ObjectMetadata();
meta.setHeader("Content-Disposition", "inline");
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss");
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
Msg fileMiME = TypeDict.FileMiME(file);
meta.setHeader("content-type", fileMiME.getData().toString());
System.out.println("待上传的图片:"+username + "/" + ShortUID + "." + entry.getKey());
ossClient.putObject(key.getBucketname(), username + "/" + ShortUID + "." + entry.getKey(),file);
returnImage.setImgname(username + "/" + ShortUID + "." + entry.getKey());//entry.getValue().getOriginalFilename()
returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgSize(file.length());
returnImage.setCode("200");
PutObjectRequest putObjectRequest =
new PutObjectRequest(
key.getBucketname(),
username + "/" + ShortUIDName + "." + prefix,
file,
meta);
ossClient.putObject(putObjectRequest);
}
}catch (Exception e){
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
return returnImage;
}
public static Integer Initialize(Keys k) {
int ret = -1;
ObjectListing objectListing = null;
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getAccessKey()!=null && k.getEndpoint()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getAccessKey().equals("") && !k.getEndpoint().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) {
OSS ossObj = new OSSClientBuilder().build(k.getEndpoint(), k.getAccessKey(), k.getAccessSecret());
try {
objectListing = ossObj.listObjects(k.getBucketname());
ret=1;
ossClient = ossObj;
key = k;
} catch (Exception e) {
System.out.println("OSS Object Is null");
ret = -1;
}
}
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getBucketname())
|| StringUtils.isBlank(k.getRequestAddress())) {
return -1;
}
OSS ossObj =
new OSSClientBuilder()
.build(k.getEndpoint(), k.getAccessKey(), k.getAccessSecret());
try {
objectListing = ossObj.listObjects(k.getBucketname());
ret = 1;
ossClient = ossObj;
key = k;
} catch (Exception e) {
System.out.println("OSS Object Is null");
ret = -1;
}
return ret;
}
public boolean delOSS(Integer keyID, Images images){
boolean b =true;
public boolean delOSS(Integer keyID, Images images) {
boolean b = true;
try {
ossClient.deleteObject(key.getBucketname(), images.getImgname());
} catch (Exception e) {
@@ -79,6 +86,4 @@ public class OSSImageupload {
}
return b;
}
}
@@ -12,42 +12,44 @@ import java.util.concurrent.TimeUnit;
@Service
public class RedisServiceImpl implements IRedisService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
@Autowired private StringRedisTemplate stringRedisTemplate;
@Autowired private RedisTemplate redisTemplate;
@Override
public void setValue(String key, Map<String, Object> value) {
ValueOperations<String, Object> vo = redisTemplate.opsForValue();
vo.set(key, value);
redisTemplate.expire(key, 1, TimeUnit.HOURS); // 这里指的是1小时后失效
}
@Override
public void setValue(String key, Map<String, Object> value) {
ValueOperations<String, Object> vo = redisTemplate.opsForValue();
vo.set(key, value);
redisTemplate.expire(key, 1, TimeUnit.HOURS); // 这里指的是1小时后失效
}
@Override
public Object getValue(String key) {
ValueOperations<String, String> vo = redisTemplate.opsForValue();
return vo.get(key);
}
@Override
public Object getValue(String key) {
ValueOperations<String, String> vo = redisTemplate.opsForValue();
return vo.get(key);
}
@Override
public void setValue(String key, String value) {
ValueOperations<String, Object> vo = redisTemplate.opsForValue();
vo.set(key, value);
redisTemplate.expire(key, 3, TimeUnit.MINUTES); // 这里指的是1小时后失效 时HOURS 分 MINUTES
}
@Override
public void setValue(String key, String value) {
ValueOperations<String, Object> vo = redisTemplate.opsForValue();
vo.set(key, value);
redisTemplate.expire(key, 3, TimeUnit.MINUTES); // 这里指的是1小时后失效 时HOURS 分 MINUTES
}
@Override
public void setTimeValue(String key, Object value, Long time) {
ValueOperations<String, Object> vo = redisTemplate.opsForValue();
vo.set(key, value);
redisTemplate.expire(key, time, TimeUnit.HOURS);
}
@Override
public void setValue(String key, Object value) {
ValueOperations<String, Object> vo = redisTemplate.opsForValue();
vo.set(key, value);
redisTemplate.expire(key, 1, TimeUnit.HOURS); // 这里指的是1小时后失效
}
@Override
public Object getMapValue(String key) {
ValueOperations<String, String> vo = redisTemplate.opsForValue();
return vo.get(key);
}
@Override
public Object getMapValue(String key) {
ValueOperations<String, String> vo = redisTemplate.opsForValue();
return vo.get(key);
}
}
@Override
public Boolean removeValue(String key) {
return redisTemplate.delete(key);
}
}
@@ -0,0 +1,166 @@
package cn.hellohao.service.impl;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.ReturnImage;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.PutObjectRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.List;
import java.util.Map;
/**
* @author Hellohao
* @version 1.0
* @date 2023/3/15 14:04
*/
@Service
public class S3Imageupload {
private static Logger logger = LoggerFactory.getLogger(S3Imageupload.class);
static AmazonS3 AS3;
static Keys KEY;
public ReturnImage ImageuploadS3(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
try {
if (null == AS3 || null == AS3) {
logger.error("S3 = 存储源对象为空");
returnImage.setCode("500");
return returnImage;
}
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
return returnImage;
}
File file = null;
try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
AS3.putObject(
new PutObjectRequest(
KEY.getBucketname(),
username + "/" + ShortUIDName + "." + prefix,
file));
// S3Object object = s3.getObject( new GetObjectRequest( key.getBucketname(),
}
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
return returnImage;
}
public static Integer Initialize(Keys k) {
int ret = -1;
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getRootPath())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getBucketname())
|| StringUtils.isBlank(k.getRequestAddress())) {
return -1;
}
try {
String regionStr = k.getRegion() == null ? "" : k.getRegion();
ClientConfiguration config = new ClientConfiguration();
config.setMaxConnections(500);
config.setConnectionTimeout(30);
// cn-north-1 us-east-1
BasicAWSCredentials credentials =
new BasicAWSCredentials(k.getAccessKey(), k.getAccessSecret());
AmazonS3 s3 =
AmazonS3ClientBuilder.standard()
.withClientConfiguration(config)
.withPathStyleAccessEnabled(false)
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(
k.getEndpoint(), regionStr))
.build();
ObjectListing objectListing = s3.listObjects(k.getBucketname());
ret = 1;
AS3 = s3;
KEY = k;
} catch (Exception e) {
logger.warn("S3 Object " + k.getKeyname() + " Is null");
ret = -1;
}
if(ret==-1){
ret = Initialize_Tow(k);
if(ret>-1){
//OK
}
}
return ret;
}
public static Integer Initialize_Tow(Keys k) {
int ret = -1;
try {
ClientConfiguration config = new ClientConfiguration();
AwsClientBuilder.EndpointConfiguration endpointConfig =
new AwsClientBuilder.EndpointConfiguration(k.getEndpoint(), k.getRegion());//cn-north-1
AWSCredentials awsCredentials = new BasicAWSCredentials(k.getAccessKey(),k.getAccessSecret());
AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
AmazonS3 s3 = AmazonS3Client.builder()
.withEndpointConfiguration(endpointConfig)
.withClientConfiguration(config)
.withCredentials(awsCredentialsProvider)
.disableChunkedEncoding()
.withPathStyleAccessEnabled(true)
.build();
List<Bucket> buckets = s3.listBuckets();
boolean b = false;
for (Bucket bucket : buckets) {
if(k.getBucketname().equals(bucket.getName())){
b = true;
}
}
if(b==false){
throw new NullPointerException();
}
ret=1;
AS3 = s3;
KEY = k;
} catch (Exception e) {
ret = -1;
}
return ret;
}
public boolean deleS3(Integer keyID, Images images) {
boolean b = true;
try {
DeleteObjectRequest deleteObjectRequest =
new DeleteObjectRequest(KEY.getBucketname(), images.getImgname());
AS3.deleteObject(deleteObjectRequest);
} catch (Exception e) {
e.printStackTrace();
b = false;
}
return b;
}
}
@@ -9,56 +9,74 @@ import cn.hellohao.utils.TypeDict;
import com.UpYun;
import com.aliyun.oss.model.ObjectMetadata;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.List;
import java.util.Map;
@Service
public class UFileImageupload {
public class UFileImageupload1 {
static UpYun uFile;
static Keys key;
public ReturnImage ImageuploadUFile(Map<String, File> fileMap, String username,Integer keyID) {
/*
* 废弃方法待补位
* */
public ReturnImage ImageuploadUFile(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
File file = null;
ObjectMetadata meta = new ObjectMetadata();
meta.setHeader("Content-Disposition", "inline");
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
file = entry.getValue();
Msg fileMiME = TypeDict.FileMiME(file);
meta.setHeader("content-type", fileMiME.getData().toString());
uFile.setContentMD5(UpYun.md5(file));
boolean result = uFile.writeFile(username + "/" + ShortUID + "." + entry.getKey(), file, true);
if(result){
boolean result =
uFile.writeFile(
username + "/" + ShortUID + "." + entry.getKey(), file, true);
if (result) {
returnImage.setImgname(username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgurl(key.getRequestAddress() + "/" +username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgurl(
key.getRequestAddress()
+ "/"
+ username
+ "/"
+ ShortUID
+ "."
+ entry.getKey());
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
}else{
} else {
returnImage.setCode("400");
System.err.println("上传失败");
}
}
}catch(Exception e){
} catch (Exception e) {
returnImage.setCode("500");
}
returnImage.setCode("500");
return returnImage;
}
public static Integer Initialize(Keys k) {
int ret = -1;
if(k.getAccessSecret()!=null && k.getAccessKey()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
if(!k.getAccessSecret().equals("") && !k.getAccessKey().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) {
if (k.getAccessSecret() != null
&& k.getAccessKey() != null
&& k.getBucketname() != null
&& k.getRequestAddress() != null) {
if (!k.getAccessSecret().equals("")
&& !k.getAccessKey().equals("")
&& !k.getBucketname().equals("")
&& !k.getRequestAddress().equals("")) {
UpYun ufObj = new UpYun(k.getBucketname(), k.getAccessKey(), k.getAccessSecret());
List<UpYun.FolderItem> items = null;
try {
items = ufObj.readDir("/",null);
items = ufObj.readDir("/", null);
ret = 1;
uFile = ufObj;
key = k;
@@ -81,5 +99,4 @@ public class UFileImageupload {
}
return b;
}
}
@@ -4,11 +4,12 @@ import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.Msg;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.utils.SetText;
import cn.hellohao.utils.TypeDict;
import com.UpYun;
import com.aliyun.oss.model.ObjectMetadata;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.List;
import java.util.Map;
@@ -18,58 +19,59 @@ public class USSImageupload {
static UpYun upyun;
static Keys key;
public ReturnImage ImageuploadUSS(Map<String, File> fileMap, String username,Integer keyID) {
public ReturnImage ImageuploadUSS(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
File file = null;
ObjectMetadata meta = new ObjectMetadata();
meta.setHeader("Content-Disposition", "inline");
try {
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
file = entry.getValue();
Msg fileMiME = TypeDict.FileMiME(file);
meta.setHeader("content-type", fileMiME.getData().toString());
upyun.setContentMD5(UpYun.md5(file));
boolean result = upyun.writeFile(username + "/" + ShortUID + "." + entry.getKey(), file, true);
if(result){
returnImage.setImgname(username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgurl(key.getRequestAddress() + "/" +username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
}else{
returnImage.setCode("400");
boolean result =
upyun.writeFile(username + "/" + ShortUIDName + "." + prefix, file, true);
if (result) {
} else {
System.err.println("上传失败");
returnImage.setCode("400");
}
}
}catch (Exception e){
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
}
return returnImage;
}
//初始化
// 初始化
public static Integer Initialize(Keys k) {
int ret = -1;
if(k.getStorageType()!=null && k.getAccessKey() != null && k.getAccessSecret() != null && k.getBucketname() != null
&& k.getRequestAddress() !=null ) {
if(!k.getStorageType().equals("") && !k.getAccessKey().equals("") && !k.getAccessSecret().equals("") && !k.getBucketname().equals("")
&& !k.getRequestAddress().equals("") ) {
// 初始化
// 创建UpYun实例。
UpYun upObj= new UpYun(k.getBucketname(), k.getAccessKey(), k.getAccessSecret());
List<UpYun.FolderItem> items = null;
try {
items = upObj.readDir("/",null);
ret = 1;
upyun = upObj;
key = k;
} catch (Exception e) {
System.out.println("USS Object Is null");
ret = -1;
}
}
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getKeyname())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getBucketname())
|| StringUtils.isBlank(k.getRequestAddress())
|| k.getStorageType() == null) {
return -1;
}
UpYun upObj = new UpYun(k.getBucketname(), k.getAccessKey(), k.getAccessSecret());
List<UpYun.FolderItem> items = null;
try {
items = upObj.readDir("/", null);
ret = 1;
upyun = upObj;
key = k;
} catch (Exception e) {
System.out.println("USS Object Is null");
ret = -1;
}
return ret;
}
@@ -80,10 +82,8 @@ public class USSImageupload {
boolean result = upyun.deleteFile(images.getImgname(), null);
} catch (Exception e) {
e.printStackTrace();
b=false;
b = false;
}
return b;
}
}
@@ -1,84 +1,85 @@
package cn.hellohao.service.impl;
import cn.hellohao.dao.*;
import cn.hellohao.config.GlobalConstant;
import cn.hellohao.dao.KeysMapper;
import cn.hellohao.dao.UploadConfigMapper;
import cn.hellohao.dao.UserMapper;
import cn.hellohao.pojo.*;
import cn.hellohao.service.ConfdataService;
import cn.hellohao.service.ImgTempService;
import cn.hellohao.service.SysConfigService;
import cn.hellohao.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baidu.aip.contentcensor.AipContentCensor;
import com.baidu.aip.contentcensor.EImgType;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
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 javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
* @author Hellohao
* @version 1.0
* @date 2020/1/9 15:46
*/
@Service
public class UploadServicel {
private static Logger logger = LoggerFactory.getLogger(UploadServicel.class);
@Autowired
ConfigMapper configMapper;
ConfdataService confdataService;
@Autowired
SysConfigService sysConfigService;
@Autowired
UploadConfigMapper uploadConfigMapper;
@Autowired
KeysMapper keysMapper;
@Autowired
ImgMapper imgMapper;
@Autowired
UserMapper userMapper;
@Autowired
ImgreviewMapper imgreviewMapper;
@Autowired
ImgTempService imgTempService;
@Autowired private UploadConfigMapper uploadConfigMapper;
@Autowired private KeysMapper keysMapper;
@Autowired private ImgServiceImpl imgServiceImpl;
@Autowired private UserMapper userMapper;
@Autowired private ImgTempService imgTempService;
@Autowired private GetSource getSource;
@Autowired deleImages deleimages;
@Autowired ImgViolationJudgeServiceImpl imgViolationJudgeService;
public Msg uploadForLoc(HttpServletRequest request,
MultipartFile multipartFile, Integer setday, String imgUrl) {
public Msg uploadForLoc(
HttpServletRequest request,
File file,
String imgName,
Integer setday,
String imgUrl,
String md5key) {
Msg msg = new Msg();
try{
String imageFileName = "未命名图像";
try {
Confdata dataJson = confdataService.selectConfdata("config");
JSONObject confdata = JSONObject.parseObject(dataJson.getJsondata());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
JSONObject jsonObject = new JSONObject();
UploadConfig uploadConfig = uploadConfigMapper.getUpdateConfig();
String userip = GetIPS.getIpAddr(request);
Subject subject = SecurityUtils.getSubject();
User u = (User) subject.getPrincipal();
if(null!=u){
u = userMapper.getUsers(u);
if (null != u) {
u = userMapper.getUsers(u);
}
Integer sourceKeyId = 0;
String md5key = null;
FileInputStream fis = null;
File file =null;
if(imgUrl==null){
imageFileName = multipartFile.getOriginalFilename();
file = SetFiles.changeFile_new(multipartFile);
}else{
if (imgUrl != null) {
Msg imgData = uploadForURL(request, imgUrl);
if(imgData.getCode().equals("200")){
if (imgData.getCode().equals("200")) {
file = new File((String) imgData.getData());
}else{
} else {
return imgData;
}
}
String imguid = UUID.randomUUID().toString().replace("-", "");
Msg msg1 = updateImgCheck(u,uploadConfig);
if(!msg1.getCode().equals("300")){
Msg msg1 = updateImgCheck(u, uploadConfig);
if (!msg1.getCode().equals("300")) {
return msg1;
}
sourceKeyId = group.getKeyid();
@@ -86,47 +87,37 @@ public class UploadServicel {
Long tmp = (memory == -1 ? -2 : UsedTotleMemory);
if (tmp >= memory) {
msg.setCode("4005");
msg.setInfo(u==null?"游客空间已用尽":"您的可用空间不足");
msg.setInfo(u == null ? "游客空间已用尽" : "您的可用空间不足");
return msg;
}
if (file.length() > TotleMemory) {
System.err.println("文件大小:"+file.length());
System.err.println("最大限制:"+TotleMemory);
msg.setCode("4006");
msg.setInfo("图像超出系统限制大小");
return msg;
}
try {
fis = new FileInputStream(file);
md5key = DigestUtils.md5Hex(fis);
} catch (Exception e) {
e.printStackTrace();
System.out.println("未获取到图片的MD5,成成UUID");
}
Msg fileMiME = TypeDict.FileMiME(file);
if(!fileMiME.getCode().equals("200")) {
if (!fileMiME.getCode().equals("200")) {
msg.setCode("4000");
msg.setInfo(fileMiME.getInfo());
return msg;
}
if(md5key==null || md5key.equals("")){
md5key = UUID.randomUUID().toString().replace("-", "");
}
if(Integer.valueOf(sysConfigService.getstate().getCheckduplicate())==1){
Images imaOBJ = new Images();
imaOBJ.setMd5key(md5key);
imaOBJ.setUserid(u==null?0:u.getId());
if(imgMapper.md5Count(imaOBJ)>0){
List<Images> images = imgMapper.selectImgUrlByMD5(md5key);
jsonObject.put("url", images.get(0).getImgurl());
jsonObject.put("name",file.getName());
jsonObject.put("imguid",images.get(0).getImguid());
msg.setData(jsonObject);
return msg;
if (md5key == null || md5key.equals("")) {
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
md5key = DigestUtils.md5Hex(fis);
} catch (Exception e) {
logger.error("获取MD5错误",e);
}finally{
try {
if (null != fis)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
String prefix = file.getName().substring(file.getName().lastIndexOf(".")+1);
//判断黑名单
String prefix = file.getName().substring(file.getName().lastIndexOf(".") + 1);
if (uploadConfig.getBlacklist() != null) {
String[] iparr = uploadConfig.getBlacklist().split(";");
for (String s : iparr) {
@@ -138,51 +129,68 @@ public class UploadServicel {
}
}
}
Map<String, File> map = new HashMap<>();
// 先存数据库
Images imgObj = new Images();
String imgnameEd = null;
Map<Map<String, String>, File> map = new HashMap<>();
if (file.exists()) {
map.put(prefix, file);//prefix
Map<String, String> m1 = new HashMap<>();
String shortUuid_y = SetText.getShortUuid();
m1.put("prefix", prefix);
m1.put("name", shortUuid_y);
map.put(m1, file);
imgnameEd = updatePath + "/" + shortUuid_y + "." + prefix;
imgObj.setImgname(imgnameEd);
if (key.getStorageType().equals(5)) {
imgObj.setImgurl(key.getRequestAddress() + "/ota/" + imgnameEd);
} else {
imgObj.setImgurl(key.getRequestAddress() + "/" + imgnameEd);
}
imgObj.setSizes(Long.toString(file.length()));
}else{
msg.setInfo("未获取到指定图像:110503");
msg.setCode("110503");
return msg;
}
imgObj.setUpdatetime(df.format(new Date()));
imgObj.setSource(key.getId());
imgObj.setUserid(u == null ? 0 : u.getId());
if (setday == 1 || setday == 3 || setday == 7 || setday == 30) {
imgObj.setImgtype(1);
ImgTemp imgDataExp = new ImgTemp();
imgDataExp.setDeltime(plusDay(setday));
imgDataExp.setImguid(imguid);
imgTempService.insertImgExp(imgDataExp);
} else {
imgObj.setImgtype(0);
}
imgObj.setAbnormal(userip);
imgObj.setMd5key(md5key);
imgObj.setImguid(imguid);
imgObj.setFormat(fileMiME.getData().toString());
imgObj.setIdname(imgName);
// Integer insertRet = imgMapper.insertImgData(imgObj);
Msg insertRet = imgServiceImpl.insertImgDataForCheck(imgObj,u,confdata,file.getName());
if (insertRet.getCode().equals("000")) {
return insertRet;
}
long stime = System.currentTimeMillis();
Map<ReturnImage, Integer> m = null;
ReturnImage returnImage = GetSource.storageSource(key.getStorageType(), map, updatePath, key.getId());
Images img = new Images();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if(returnImage.getCode().equals("200")){
String imgurl = returnImage.getImgurl();
Long imgsize = returnImage.getImgSize();
String imgname = returnImage.getImgname();
img.setImgurl(imgurl);
img.setUpdatetime(df.format(new Date()));
img.setSource(key.getId());
img.setUserid(u == null ? 0 : u.getId());
img.setSizes(imgsize.toString());
if(uploadConfig.getUrltype()==2){
img.setImgname(imgname);
}else{
img.setImgname(SetText.getSubString(imgname, key.getRequestAddress() + "/", ""));
}
if(setday == 1 || setday == 3 || setday == 7 || setday == 30){
img.setImgtype(1);
ImgTemp imgDataExp = new ImgTemp();
imgDataExp.setDeltime(plusDay(setday));
imgDataExp.setImguid(imguid);
imgTempService.insertImgExp(imgDataExp);
}else{
img.setImgtype(0);
}
img.setAbnormal(userip);
img.setMd5key(md5key);
img.setImguid(imguid);
img.setFormat(fileMiME.getData().toString());
img.setIdname(imageFileName);
userMapper.insertimg(img);
ReturnImage returnImage = getSource.storageSource(key.getStorageType(), map, updatePath, key.getId());
if (returnImage.getCode().equals("200")) {
long etime = System.currentTimeMillis();
Print.Normal("上传图片所用总时长:" + String.valueOf(etime - stime) + "ms");
jsonObject.put("url", img.getImgurl());
jsonObject.put("name", imgname);
jsonObject.put("imguid",img.getImguid());
new Thread(()->{LegalImageCheck(img);}).start();
}else{
jsonObject.put("url", imgObj.getImgurl());
jsonObject.put("name", imgObj.getImgname());
jsonObject.put("imguid", imgObj.getImguid());
imgViolationJudgeService.LegalImageCheck(imgObj,key);
// new Thread(
// () -> {
// LegalImageCheck(imgObj);
// })
// .start();
} else {
imgServiceImpl.deleimgForImgUid(imgObj.getImguid());
msg.setCode("5001");
msg.setInfo("上传服务内部错误");
return msg;
@@ -190,37 +198,88 @@ public class UploadServicel {
file.delete();
msg.setData(jsonObject);
return msg;
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
msg.setInfo("上传时发生了一些错误");
msg.setCode("110500");
return msg;
}
}
public static Msg uploadForURL(HttpServletRequest request, String imgurl){
final Msg msg = new Msg();
if(true){
public CompletableFuture<Msg> mergeFile(HttpServletRequest request, String data, User user){
Msg msg = new Msg();
try{
JSONObject jsonObj = JSONObject.parseObject(data);
String filename = jsonObj.getString("filename");
String uuid = jsonObj.getString("uuid");
String md5 = jsonObj.getString("md5");
String classifications = jsonObj.getString("classifications");
Integer day = jsonObj.getInteger("day");
String source = jsonObj.getString("source");
String imgIdentifier = jsonObj.getString("imgIdentifier");
JSONArray jsonArray = new JSONArray();
classifications = classifications==null?"":classifications;
if(!org.apache.commons.lang3.StringUtils.isBlank(classifications)){
String[] calssif = classifications.split(",");
for (int i = 0; i < calssif.length; i++) {
jsonArray.add(calssif[i]);
}
}
String path = GlobalConstant.HELLOHAOTEMPIMG_PATH+File.separator+uuid+File.separator+imgIdentifier+File.separator+filename;
// if(new File(path).exists()){
// path = GlobalConstant.HELLOHAOTEMPIMG_PATH+File.separator+UUID.randomUUID().toString().replace("-", "").toLowerCase()+filename;
// }
String folder = GlobalConstant.HELLOHAOTEMPIMG_PATH+File.separator+uuid+File.separator+imgIdentifier;
String delFolder = GlobalConstant.HELLOHAOTEMPIMG_PATH+File.separator+uuid;
String originalFilename = filename;
if(StringUtils.isBlank(originalFilename)){
originalFilename = "未命名图像";
}
Msg merge = SetFiles.merge(path, folder, filename);
if(merge.getCode().equals("200")){
File file = new File(path);
// CompletableFuture<Msg> ret =
msg = uploadForLoc(request, file,originalFilename, day, null,md5);
// msg = ret.get();
}else{
msg = merge;
}
SetFiles.delFileFolder(new File(delFolder));
}catch (Exception e){
e.printStackTrace();
msg.setCode("500");
msg.setInfo("文件上传时发生错误");
}
return CompletableFuture.completedFuture(msg);
}
public static Msg uploadForURL(HttpServletRequest request, String imgurl) {
Msg msg = new Msg();
if (true) {
Long imgsize = 0L;
try {
if(imgsize==0){
if (imgsize == 0) {
String ShortUID = SetText.getShortUuid();
String savePath = request.getSession().getServletContext().getRealPath("/")+File.separator+"hellohaotmp"+File.separator;
Map<String ,Object> bl =ImgUrlUtil.downLoadFromUrl (imgurl, ShortUID, savePath);
if((Boolean) bl.get("res")==true){
String savePath =
request.getSession().getServletContext().getRealPath("/")
+ File.separator
+ "hellohaotmp"
+ File.separator;
Map<String, Object> bl = ImgUrlUtil.downLoadFromUrl(imgurl, ShortUID, savePath);
if ((Boolean) bl.get("res") == true) {
msg.setCode("200");
msg.setData(bl.get("imgPath"));
return msg;
}else{
if(bl.get("StatusCode").equals("110403")){
} else {
if (bl.get("StatusCode").equals("110403")) {
msg.setInfo("该链接非图像文件,无法上传");
}else{
} else {
msg.setInfo("该链接暂时无法上传");
}
msg.setCode("500");
}
}else{
} else {
msg.setCode("500");
msg.setInfo("获取资源失败");
}
@@ -228,7 +287,7 @@ public class UploadServicel {
msg.setCode("500");
msg.setInfo("获取资源失败");
}
}else{
} else {
msg.setCode("500");
msg.setInfo("该链接无效");
}
@@ -236,40 +295,46 @@ public class UploadServicel {
return msg;
}
private static Group group; //上传用户或游客的所属分组
private static Long memory;//上传用户或者游客的分配容量 memory
private static Long TotleMemory;//用户或者游客下可使用的总容量 //maxsize
private static Long UsedTotleMemory;//用户或者游客已经用掉的总容量 //usermemory
private static String updatePath="tourist";
private static Group group; // 上传用户或游客的所属分组
private static Long memory; // 上传用户或者游客的分配容量 memory
private static Long TotleMemory; // 用户或者游客下可使用的总容量 //maxsize
private static Long UsedTotleMemory; // 用户或者游客已经用掉的总容量 //usermemory
private static String updatePath = "tourist";
//判断用户 或 游客 当前上传图片的一系列校验
private Msg updateImgCheck(User user, UploadConfig uploadConfig){
final Msg msg = new Msg();
// 判断用户 或 游客 当前上传图片的一系列校验
private Msg updateImgCheck(User user, UploadConfig uploadConfig) {
Msg msg = new Msg();
java.text.DateFormat dateFormat = null;
try {
dateFormat = new SimpleDateFormat("yyyy/MM/dd");
if (user == null) {
if(uploadConfig.getIsupdate()!=1){
if (uploadConfig.getIsupdate() != 1) {
msg.setCode("1000");
msg.setInfo("系统已禁用游客上传");
return msg;
}
updatePath="tourist";
updatePath = "tourist";
group = GetCurrentSource.GetSource(null);
memory = Long.valueOf(uploadConfig.getVisitormemory());//单位 B 游客设置总量
TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists());//单位 B 游客单文件大小
UsedTotleMemory = imgMapper.getusermemory(0)==null?0L : imgMapper.getusermemory(0);//单位 B
memory = Long.valueOf(uploadConfig.getVisitormemory()); // 单位 B 游客设置总量
TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists()); // 单位 B 游客单文件大小
UsedTotleMemory =
imgServiceImpl.getusermemory(0) == null
? 0L
: imgServiceImpl.getusermemory(0); // 单位 B
} else {
if(uploadConfig.getUserclose()!=1){
if (uploadConfig.getUserclose() != 1) {
msg.setCode("1001");
msg.setInfo("系统已禁用上传功能");
return msg;
}
updatePath = user.getUsername();
group= GetCurrentSource.GetSource(user.getId());
memory = Long.valueOf(user.getMemory());//单位 B *1024*1024
TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser());//单位 B
UsedTotleMemory = imgMapper.getusermemory(user.getId())==null?0L:imgMapper.getusermemory(user.getId());//单位 B
group = GetCurrentSource.GetSource(user.getId());
memory = Long.valueOf(user.getMemory()); // 单位 B *1024*1024
TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser()); // 单位 B
UsedTotleMemory =
imgServiceImpl.getusermemory(user.getId()) == null
? 0L
: imgServiceImpl.getusermemory(user.getId()); // 单位 B
}
if (uploadConfig.getUrltype() == 2) {
updatePath = dateFormat.format(new Date());
@@ -282,81 +347,19 @@ public class UploadServicel {
return msg;
}
private synchronized void LegalImageCheck(Images images){
System.out.println("非法图像鉴别进程启动");
Imgreview imgreview = null;
try {
imgreview = imgreviewMapper.selectByusing(1);
} catch (Exception e) {
Print.warning("获取鉴别程序的时候发生错误");
e.printStackTrace();
}
if(null != imgreview){
LegalImageCheckForBaiDu(imgreview,images);
}
}
private void LegalImageCheckForBaiDu(Imgreview imgreview,Images images){
System.out.println("非法图像鉴别进程启动-BaiDu");
if(imgreview.getUsing()==1){
try {
AipContentCensor client = new AipContentCensor(imgreview.getAppId(), imgreview.getApiKey(), imgreview.getSecretKey());
client.setConnectionTimeoutInMillis(5000);
client.setSocketTimeoutInMillis(30000);
org.json.JSONObject res = client.antiPorn(images.getImgurl());
res = client.imageCensorUserDefined(images.getImgurl(), EImgType.URL, null);
System.err.println("返回的鉴黄json:"+res.toString());
com.alibaba.fastjson.JSONArray jsonArray = JSON.parseArray("[" + res.toString() + "]");
for (Object o : jsonArray) {
com.alibaba.fastjson.JSONObject jsonObject = (com.alibaba.fastjson.JSONObject) o;
com.alibaba.fastjson.JSONArray data = jsonObject.getJSONArray("data");
Integer conclusionType = jsonObject.getInteger("conclusionType");
if(conclusionType!=null){
if (conclusionType == 2) {
for (Object datum : data) {
com.alibaba.fastjson.JSONObject imgdata = (com.alibaba.fastjson.JSONObject) datum;
if (imgdata.getInteger("type") == 1) {
Images img = new Images();
img.setImgname(images.getImgname());
img.setViolation("1[1]");
imgMapper.setImg(img);
Imgreview imgv = new Imgreview();
imgv.setId(1);
Integer count = imgreview.getCount();
System.out.println("违法图片总数:" + count);
imgv.setCount(count + 1);
imgreviewMapper.updateByPrimaryKeySelective(imgv);
System.err.println("存在非法图片,进行处理操作");
}
}
}
}
}
}catch (Exception e){
System.out.println("图像鉴黄线程执行过程中出现异常");
e.printStackTrace();
}
}
}
//计算时间
public static String plusDay(int setday){
// 计算时间
public static String plusDay(int setday) {
Date d = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currdate = format.format(d);
System.out.println("现在的日期是:" + currdate);
Calendar ca = Calendar.getInstance();
ca.setTime(d);
ca.add(Calendar.DATE, setday);// num为增加的天数,可以改变的
ca.add(Calendar.DATE, setday); // num为增加的天数,可以改变的
d = ca.getTime();
String enddate = format.format(d);
System.out.println("到期的日期:" + enddate);
return enddate;
}
}
@@ -3,7 +3,6 @@ package cn.hellohao.service.impl;
import cn.hellohao.dao.CodeMapper;
import cn.hellohao.dao.UserMapper;
import cn.hellohao.exception.CodeException;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.User;
import cn.hellohao.service.UserService;
import cn.hellohao.utils.Print;
@@ -42,11 +41,6 @@ public class UserServiceImpl implements UserService {
return userMapper.getUsers(user);
}
@Override
public Integer insertimg(Images img) {
// TODO Auto-generated method stub
return userMapper.insertimg(img);
}
@Override
public Integer change(User user) {
@@ -3,104 +3,158 @@ package cn.hellohao.service.impl;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.Msg;
import cn.hellohao.service.IRedisService;
import cn.hellohao.service.ImgAndAlbumService;
import cn.hellohao.service.ImgService;
import cn.hellohao.service.ImgTempService;
import cn.hellohao.utils.LocUpdateImg;
import cn.hellohao.utils.progress.MyProgress;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
@Service
public class deleImages {
@Autowired private NOSImageupload nosImageupload;
@Autowired private OSSImageupload ossImageupload;
@Autowired private COSImageupload cosImageupload;
@Autowired private KODOImageupload kodoImageupload;
@Autowired private USSImageupload ussImageupload;
@Autowired private S3Imageupload s3Imageupload;
@Autowired private FtpServiceImpl ftpService;
@Autowired private ImgAndAlbumService imgAndAlbumService;
@Autowired private ImgTempService imgTempService;
@Autowired private ImgService imgService;
@Autowired private KeysServiceImpl keysService;
@Autowired private IRedisService iRedisService;
@Autowired
private NOSImageupload nosImageupload;
@Autowired
private OSSImageupload ossImageupload;
@Autowired
private COSImageupload cosImageupload;
@Autowired
private KODOImageupload kodoImageupload;
@Autowired
private USSImageupload ussImageupload;
@Autowired
private UFileImageupload uFileImageupload;
@Autowired
private FTPImageupload ftpImageupload;
@Autowired
private ImgAndAlbumService imgAndAlbumService;
@Autowired
private ImgTempService imgTempService;
@Autowired
private ImgService imgService;
@Autowired
private KeysServiceImpl keysService;
public Msg dele(HttpSession httpSession,Integer... imgIds) {
Msg msg = new Msg();
MyProgress myProgress = new MyProgress();
myProgress.InitializeDelImg();
List<Integer> ids = new ArrayList<>();
int successCount = 0;
List<String> errorIds = new ArrayList<>();
for (Integer id : imgIds) {
//删除图片
boolean isDele = false;
try {
Images image = imgService.selectByPrimaryKey(id);
Keys key = keysService.selectKeys(image.getSource());
if (key.getStorageType() == 1) {
isDele = nosImageupload.delNOS(key.getId(), image);
} else if (key.getStorageType() == 2) {
isDele = ossImageupload.delOSS(key.getId(), image);
} else if (key.getStorageType() == 3) {
isDele = ussImageupload.delUSS(key.getId(), image);
} else if (key.getStorageType() == 4) {
isDele = kodoImageupload.delKODO(key.getId(), image);
} else if (key.getStorageType() == 5) {
isDele = LocUpdateImg.deleteLOCImg(image);
} else if (key.getStorageType() == 6) {
isDele = cosImageupload.delCOS(key.getId(), image);
} else if (key.getStorageType() == 7) {
isDele = ftpImageupload.delFTP(key.getId(), image);
} else if (key.getStorageType() == 8) {
isDele = uFileImageupload.delUFile(key.getId(), image);
} else {
System.err.println("未获取到对象存储参数,删除失败。");
}
if(isDele){
try {
imgAndAlbumService.deleteImgAndAlbum(image.getImgurl());
imgTempService.delImgAndExp(image.getImguid());
imgService.deleimg(image.getId());
ids.add(image.getId());
successCount++;
System.out.println("删除成功加一个"+image.getId());
} catch (Exception e) {
e.printStackTrace();
System.err.println(image.getImgname()+":图片数据库记录时发生错误");
errorIds.add(image.getImgurl());
}
}
myProgress.setDelSuccessCount(successCount);
myProgress.setDelSuccessImgList(ids);
myProgress.setDelErrorImgListt(errorIds);
if(null !=httpSession){
httpSession.setAttribute("myProgressForDel",myProgress);
}
} catch (Exception e) {
System.err.println("删除的时候发生了一些异常");
e.printStackTrace();
}
public Msg dele(String uuid, Long... imgIds) {
Msg msg = new Msg();
MyProgress myProgress = new MyProgress();
myProgress.InitializeDelImg();
List<Long> ids = new ArrayList<>();
int successCount = 0;
List<String> errorIds = new ArrayList<>();
for (int i = 0; i < imgIds.length; i++) {
// 删除图片
boolean isDele = false;
try {
Images image = imgService.selectByPrimaryKey(imgIds[i]);
Keys key = keysService.selectKeys(image.getSource());
if (key.getStorageType() == 1) {
isDele = nosImageupload.delNOS(key.getId(), image);
} else if (key.getStorageType() == 2) {
isDele = ossImageupload.delOSS(key.getId(), image);
} else if (key.getStorageType() == 3) {
isDele = ussImageupload.delUSS(key.getId(), image);
} else if (key.getStorageType() == 4) {
isDele = kodoImageupload.delKODO(key.getId(), image);
} else if (key.getStorageType() == 5) {
isDele = LocUpdateImg.deleteLOCImg(image);
} else if (key.getStorageType() == 6) {
isDele = cosImageupload.delCOS(key.getId(), image);
} else if (key.getStorageType() == 7) {
isDele = ftpService.delFTP(key.getId(), image);
} else if (key.getStorageType() == 8) {
isDele = s3Imageupload.deleS3(key.getId(), image);
} else {
System.err.println("未获取到对象存储参数,删除失败。");
}
myProgress.setDelOCT(true);
msg.setData(ids);
return msg;
// if (isDele) {
try {
imgAndAlbumService.deleteImgAndAlbum(image.getImgurl());
imgTempService.delImgAndExp(image.getImguid());
imgService.deleimg(image.getId());
ids.add(image.getId());
successCount++;
System.out.println("删除成功加一个" + image.getId());
} catch (Exception e) {
e.printStackTrace();
System.err.println(image.getImgname() + ":图片数据库记录时发生错误");
errorIds.add(image.getImgurl());
}
// }
if(uuid!=null){
myProgress.setDelSuccessCount(successCount);
myProgress.setDelSuccessImgList(ids);
myProgress.setDelErrorImgListt(errorIds);
if (imgIds.length == (i + 1)) {
myProgress.setDelOCT(1);
} else {
myProgress.setDelOCT(0);
}
iRedisService.setTimeValue(uuid, JSONObject.toJSONString(myProgress), 24L);
}
} catch (Exception e) {
System.err.println("删除的时候发生了一些异常");
ids.add(imgIds[i]);
successCount++;
if(uuid!=null){
myProgress.setDelSuccessCount(successCount);
myProgress.setDelSuccessImgList(ids);
myProgress.setDelErrorImgListt(errorIds);
if (imgIds.length == (i + 1)) {
myProgress.setDelOCT(1);
} else {
myProgress.setDelOCT(0);
}
iRedisService.setTimeValue(uuid, JSONObject.toJSONString(myProgress), 24L);
}
e.printStackTrace();
}
}
msg.setData(ids);
return msg;
}
public Msg dele2(String... imgIds) {
Msg msg = new Msg();
List<Long> ids = new ArrayList<>();
for (int i = 0; i < imgIds.length; i++) {
try {
Images image = imgService.selectByPrimaryKey(Long.valueOf(imgIds[i]));
Keys key = keysService.selectKeys(image.getSource());
if (key.getStorageType() == 1) {
nosImageupload.delNOS(key.getId(), image);
} else if (key.getStorageType() == 2) {
ossImageupload.delOSS(key.getId(), image);
} else if (key.getStorageType() == 3) {
ussImageupload.delUSS(key.getId(), image);
} else if (key.getStorageType() == 4) {
kodoImageupload.delKODO(key.getId(), image);
} else if (key.getStorageType() == 5) {
LocUpdateImg.deleteLOCImg(image);
} else if (key.getStorageType() == 6) {
cosImageupload.delCOS(key.getId(), image);
} else if (key.getStorageType() == 7) {
ftpService.delFTP(key.getId(), image);
} else if (key.getStorageType() == 8) {
s3Imageupload.deleS3(key.getId(), image);
} else {
System.err.println("未获取到对象存储参数,删除失败。");
}
try {
imgAndAlbumService.deleteImgAndAlbum(image.getImgurl());
imgTempService.delImgAndExp(image.getImguid());
imgService.deleimg(image.getId());
ids.add(image.getId());
} catch (Exception e) {
e.printStackTrace();
System.err.println(image.getImgname() + ":图片数据库记录时发生错误");
}
} catch (Exception e) {
System.err.println("删除的时候发生了一些异常");
// ids.add(Long.valueOf(imgIds[i]));
e.printStackTrace();
}
}
msg.setData(ids);
return msg;
}
}
@@ -1,324 +0,0 @@
package cn.hellohao.utils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* <p>Title: </p>
* <p>Description: </p>
*
* @author Hellohao
* @date 2019年11月10日
*/
public class FTPUtils {
private final Logger LOGGER = LogManager.getLogger(getClass());
private FTPClient ftpClient = null;
private String server;
private int port;
private String userName;
private String userPassword;
public FTPUtils(String server, int port, String userName, String userPassword) {
this.server = server;
this.port = port;
this.userName = userName;
this.userPassword = userPassword;
}
public boolean open() {
// 判断是否已连接
if (ftpClient != null && ftpClient.isConnected()) {
return true;
}
try {
ftpClient = new FTPClient();
// 连接FTP服务器
ftpClient.connect(this.server, this.port);
ftpClient.login(this.userName, this.userPassword);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
Print.warning("FTP服务器拒绝连接.");
this.close();
System.exit(1);
}
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
return true;
} catch (Exception e) {
this.close();
e.printStackTrace();
return false;
}
}
/**
* <p>Title: 切换到父目录</p>
* <p>Description: </p>
*
* @author Hellohao
* @date 2018年10月11日
*
* @return 切换结果 true:成功, false:失败
*/
private boolean changeToParentDir() {
try {
return ftpClient.changeToParentDirectory();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
*
* @param dir 目的目录
* @return 切换结果 true:成功,false:失败
*/
private boolean cd(String dir) {
try {
return ftpClient.changeWorkingDirectory(dir);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
*
* @param filePath 指定的目录
* @return 文件列表,或者null
*/
private FTPFile[] getFileList(String filePath) {
try {
return ftpClient.listFiles(filePath);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
*
* @param ftpPath 目的目录
* @return 切换结果
*/
public boolean changeDir(String ftpPath) {
if (!ftpClient.isConnected()) {
return false;
}
try {
char[] chars = ftpPath.toCharArray();
StringBuffer sbStr = new StringBuffer(256);
for (int i = 0; i < chars.length; i++) {
if ('\\' == chars[i]) {
sbStr.append('/');
} else {
sbStr.append(chars[i]);
}
}
ftpPath = sbStr.toString();
if (ftpPath.indexOf('/') == -1) {
// 只有一层目录
ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes(), "UTF-8"));
} else {
// 多层目录循环创建
String[] paths = ftpPath.split("/");
for (int i = 0; i < paths.length; i++) {
ftpClient.changeWorkingDirectory(new String(paths[i].getBytes(), "UTF-8"));
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* @param ftpPath 需要创建的目录
* @return
*/
public boolean mkDir(String ftpPath) {
if (!ftpClient.isConnected()) {
return false;
}
try {
// 将路径中的斜杠统一
char[] chars = ftpPath.toCharArray();
StringBuffer sbStr = new StringBuffer(256);
for (int i = 0; i < chars.length; i++) {
if ('\\' == chars[i]) {
sbStr.append('/');
} else {
sbStr.append(chars[i]);
}
}
ftpPath = sbStr.toString();
if (ftpPath.indexOf('/') == -1) {
// 只有一层目录
ftpClient.makeDirectory(new String(ftpPath.getBytes(), "UTF-8"));
ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes(), "UTF-8"));
} else {
// 多层目录循环创建
String[] paths = ftpPath.split("/");
for (int i = 0; i < paths.length; i++) {
ftpClient.makeDirectory(new String(paths[i].getBytes(), "UTF-8"));
ftpClient.changeWorkingDirectory(new String(paths[i].getBytes(), "UTF-8"));
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
*
* @param //localDirectoryAndFileName 本地文件目录和文件名
* @param ftpFileName 上传到服务器的文件名()
* @param ftpDirectory FTP目录如:/path1/pathb2/,如果目录不存在会自动创建目录(目录可以省略)
* @return
*/
public boolean upload(File srcFile, String ftpFileName, String ftpDirectory) {
if (!ftpClient.isConnected()) {
return false;
}
boolean flag = false;
if (ftpClient != null) {
FileInputStream fis = null;
try {
fis = new FileInputStream(srcFile);
// 创建目录
this.mkDir(ftpDirectory);
ftpClient.setBufferSize(100000);
ftpClient.setControlEncoding("UTF-8");
// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if (ftpFileName == null || ftpFileName == "") {
ftpFileName = srcFile.getName();
}
// 上传
flag = ftpClient.storeFile(new String(ftpFileName.getBytes(), "UTF-8"), fis);
} catch (Exception e) {
this.close();
e.printStackTrace();
return false;
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
/**
* @param ftpDirectoryAndFileName ftp服务器文件路径,以/dir形式开始
* @param localDirectoryAndFileName 保存到本地的目录
* @return
*/
public boolean get(String ftpDirectoryAndFileName, String localDirectoryAndFileName) {
if (!ftpClient.isConnected()) {
return false;
}
ftpClient.enterLocalPassiveMode();
try {
// 将路径中的斜杠统一
char[] chars = ftpDirectoryAndFileName.toCharArray();
StringBuffer sbStr = new StringBuffer(256);
for (int i = 0; i < chars.length; i++) {
if ('\\' == chars[i]) {
sbStr.append('/');
} else {
sbStr.append(chars[i]);
}
}
ftpDirectoryAndFileName = sbStr.toString();
String filePath = ftpDirectoryAndFileName.substring(0, ftpDirectoryAndFileName.lastIndexOf("/"));
String fileName = ftpDirectoryAndFileName.substring(ftpDirectoryAndFileName.lastIndexOf("/") + 1);
this.changeDir(filePath);
ftpClient.retrieveFile(new String(fileName.getBytes(), "UTF-8"), new FileOutputStream(localDirectoryAndFileName)); // download
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
*
* @param pathName
* @return
*/
public String[] getFileNameList(String pathName) {
try {
return ftpClient.listNames(pathName);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* <p>Title: 删除FTP上的文件</p>
* <p>Description: </p>
* @param ftpDirAndFileName 路径开头不能加/,比如应该是test/filename1
* @return
*/
public boolean deleteFile(String ftpDirAndFileName) {
if (!ftpClient.isConnected()) {
return false;
}
try {
return ftpClient.deleteFile(ftpDirAndFileName);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* @param ftpDirectory
* @return
*/
public boolean deleteDirectory(String ftpDirectory) {
if (!ftpClient.isConnected()) {
return false;
}
try {
return ftpClient.removeDirectory(ftpDirectory);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* <p>Title: 关闭链接</p>
* <p>Description: </p>
*/
public void close() {
try {
if (ftpClient != null && ftpClient.isConnected()) {
ftpClient.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
+77 -31
View File
@@ -1,11 +1,15 @@
package cn.hellohao.utils;
import cn.hellohao.config.GlobalConstant;
import cn.hutool.core.io.FileUtil;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Properties;
import java.util.UUID;
@@ -16,7 +20,7 @@ import java.util.UUID;
*/
@Configuration
public class FirstRun implements InitializingBean {
private static Logger logger = LoggerFactory.getLogger(FirstRun.class);
@Value("${spring.datasource.username}")
private String jdbcusername;
@@ -26,26 +30,33 @@ public class FirstRun implements InitializingBean {
@Value("${spring.datasource.url}")
private String jdbcurl;
@Value("${DockerWebHost}")
private String DockerWebHost;
@Override
public void afterPropertiesSet() {
if(!DockerWebHost.contains("null")){
contentToTxt("/hellohaotbed/webapps/hellohao/config.json", "{\"serverHost\": \""+DockerWebHost+"\"}");
}
isWindows();
RunSqlScript.USERNAME = jdbcusername;
RunSqlScript.PASSWORD = jdbcpass;
RunSqlScript.DBURL = jdbcurl;
Integer dataBaseName = RunSqlScript.RunSelectCount("SELECT count(*) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'tbed'");
if(dataBaseName<1){
Print.Normal("无法找到指定数据库,请先创建'tbed'数据库,并导入表结构后再试。");
System.exit(1);
}
Print.Normal("正在校验数据库参数...");
logger.info("正在校验数据库参数...");
RunSqlScript.RunInsert(dynamic);
RunSqlScript.RunInsert(compressed);
String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
RunSqlScript.RunInsert("update user set uid='"+uid+"' where id = 1");
Integer ret0 =
RunSqlScript.RunSelectCount(judgeTable + "'keys' and column_name = 'Region'");
if (ret0 == 0) {
RunSqlScript.RunInsert(sql0);
Print.Normal("Add keys.Region||RootPath");
}
Integer ret1 = RunSqlScript.RunSelectCount(sql1);
if(ret1==0){
Print.Normal("In execution...");
@@ -82,11 +93,7 @@ public class FirstRun implements InitializingBean {
RunSqlScript.RunInsert(sql8);
Print.Normal("Stage 6");
}
Integer ret5 = RunSqlScript.RunSelectCount(judgeTable+"'config' and column_name = 'theme'");
if(ret5==0){
RunSqlScript.RunInsert(sql9);
Print.Normal("Stage 7");
}
Integer ret6 = RunSqlScript.RunSelectCount(judgeTable+" 'user' and column_name = 'token'");
if(ret6==0){
RunSqlScript.RunInsert(sql12);
@@ -98,38 +105,49 @@ public class FirstRun implements InitializingBean {
RunSqlScript.RunInsert(instartAppclient);
Print.Normal("Add table.appclient");
}
Integer ret7 = RunSqlScript.RunSelectCount(judgeTable+" 'imgdata' and column_name = 'idname'");
if(ret7==0){
RunSqlScript.RunInsert(sql11);
Print.Normal("Add imgdata.idname");
Integer isconfdata = RunSqlScript.RunSelectCount(isTableName+"'confdata'");
if(isconfdata==0){
RunSqlScript.RunInsert(createConfdata);
RunSqlScript.RunInsert(instartConfdata);
Print.Normal("Add table.confdata");
}
RunSqlScript.RunInsert("alter table `config` modify column `explain` text,modify column `links` text,modify column `notice` text,modify column `baidu` text");
RunSqlScript.RunInsert(inddx_md5key);
RunSqlScript.RunInsert("UPDATE `keys` SET `Endpoint` = '0' WHERE `id` = 8");
RunSqlScript.RunInsert(index_imgdata);
RunSqlScript.RunInsert("ALTER TABLE tbed.`user` MODIFY id int auto_increment;");
Print.Normal("Stage success");
clears();
}
//检查表是否存在,后边加'imgdata' and column_name = 'explains' 检查字段是否存在
private String isTableName = "SELECT count(table_name) FROM information_schema.TABLES WHERE TABLE_SCHEMA='tbed' and table_name =";
private String judgeTable = "select count(*) from information_schema.columns where TABLE_SCHEMA='tbed' and table_name = ";
//创建blacklist 2019-11-29
private String sql0 =
"alter table `keys` add (Region varchar(255) DEFAULT null,RootPath varchar(255) DEFAULT '/');";
private String sql1 = "select count(*) from information_schema.columns where table_name = 'uploadconfig' and column_name = 'blacklist'";
private String sql2 = "alter table uploadconfig add blacklist varchar(500);";
//创建imgandalbum和album 添加imgdata表字段explain 2019-12-20
private String sql3 ="CREATE TABLE `imgandalbum` (`imgname` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`albumkey` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic";
private String sql4 ="CREATE TABLE `album` (`albumkey` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`albumtitle` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`createdate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic";
private String sql6 = "alter table imgdata add explains varchar(5000)";
//添加album表字段userid
private String sql7 = "alter table album add userid int(10)";
//添加imgdata表字段md5key
private String sql8 = "alter table imgdata add md5key varchar(5000)";
private String sql9 = "ALTER TABLE config ADD theme int(4) DEFAULT '1' COMMENT '主题' ";
private String sql11 = "alter table `imgdata` add idname varchar(255) DEFAULT '未命名图像' ;";
// 图片标识名字段
private String sql11 = "alter table `imgdata` add idname varchar(255) DEFAULT '未命名' ;";
private String sql12 = "alter table tbed.user add `token` varchar(255)";
//创建客户端程序相关表
private String createAppclient = "CREATE TABLE `appclient` (`id` varchar(10) NOT NULL,`isuse` varchar(10) NOT NULL,`winpackurl` varchar(255) NULL DEFAULT NULL,`macpackurl` varchar(255) NULL DEFAULT NULL,`appname` varchar(20) NULL,`applogo` varchar(255) NULL,`appupdate` varchar(10) NOT NULL) ";
private String instartAppclient = "INSERT INTO `appclient` VALUES ('app', 'on', NULL, NULL, 'Hellohao图像托管', 'https://hellohao.nos-eastchina1.126.net/TbedClient/app.png', '1.0.1');";
private String inddx_md5key = "ALTER TABLE imgdata ADD INDEX index_md5key_url ( md5key,imgurl)";
//创建confdata表
private String createConfdata = "CREATE TABLE tbed.confdata ( `key` varchar(100) NULL, jsondata LONGTEXT NULL )";
private String instartConfdata =
"INSERT INTO tbed.confdata VALUES ('config', '{\\\"sourcekey\\\":7,\\\"emails\\\":1,\\\"webname\\\":\\\"Hellohao图床\\\",\\\"explain\\\":\\\"Hellohao图像托管,是一家免费开源的图像托管,即时分享你的美好瞬间。\\\",\\\"links\\\":\\\"<p style=\\\\\\\"color:#7c7c88;\\\\\\\">© 2019 <a href=\\\\\\\"http://www.Hellohao.cn/\\\\\\\" target=\\\\\\\"_blank\\\\\\\" title=\\\\\\\"Hellohao\\\\\\\">Hellohao</a><span> - All Rights Reserved</span> </p>\\\",\\\"notice\\\":\\\"也许...|这将是最好用的图床|为了更好的用户体验,建议您注册本站继续免费使用Hellohao图床。本站不得上传任何形式的非法图片,一旦发现,永久删除并禁封账户。情节严重者将相关资料交于相关部门处理。\\\",\\\"domain\\\":\\\"http://127.0.0.1:10088\\\",\\\"background1\\\":\\\"\\\",\\\"sett\\\":\\\"1\\\",\\\"webms\\\":\\\"Hellohao图像托管,是一家免费开源的图像托管,即时分享你的美好瞬间。\\\",\\\"webkeywords\\\":\\\"hellohao图床,图床,图片上传,开源图床,hellohao,图像托管,图片分享\\\",\\\"theme\\\":2,\\\"websubtitle\\\":\\\"这将是你用过最优秀的图像托管程序\\\",\\\"logo\\\":null,\\\"aboutinfo\\\":\\\"<img width=\\\\\\\"300px\\\\\\\" src=\\\\\\\"http://img.wwery.com/hellohao/rPscRYwz.png\\\\\\\"> <br /> <br /> <p>也许,这将是你用到最优秀的图像托管程序</p> <p>本程序为Hellohao图象托管程序</p> <br/> <p style=\\\\\\\"color: #656565;\\\\\\\">作者:hellohao独立开发</p> <p style=\\\\\\\"color: #656565;\\\\\\\">www.hellohao.cn</p>\\\"}');";
private String index_imgdata = "ALTER TABLE imgdata ADD INDEX index_md5key_url ( id,md5key,imgname,imgurl,idname,imguid)";
private String dynamic = "alter table imgdata row_format=dynamic";
private String compressed = "alter table imgdata row_format=compressed";
@@ -140,14 +158,15 @@ public class FirstRun implements InitializingBean {
//判断目录有没有创建
File file = new File(GlobalConstant.LOCPATH);
if(!file.exists()){
file.mkdirs();
file1.mkdirs();
file2.mkdirs();
FileUtil.mkdir(file);
FileUtil.mkdir(file1);
FileUtil.mkdir(file2);
}else{
if(!file1.exists()){
file1.mkdirs();
FileUtil.mkdir(file1);
}else if(!file2.exists()){
file2.mkdirs();
FileUtil.mkdir(file2);
}
}
}
@@ -163,4 +182,31 @@ public class FirstRun implements InitializingBean {
return System.getProperties().getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1;
}
public static void contentToTxt(String filePath, String content) {
// String str = new String(); //原有txt内容
String s1 = new String();//内容更新
try {
File f = new File(filePath);
if (f.exists()) {
System.out.print("文件存在");
} else {
System.out.print("文件不存在");
// f.createNewFile();// 不存在则创建
FileUtil.createTempFile(f);
}
// BufferedReader input = new BufferedReader(new FileReader(f));
// while ((str = input.readLine()) != null) {
// s1 += str + "\n";
// }
// input.close();
s1 += content + "\n";
BufferedWriter output = new BufferedWriter(new FileWriter(f));
output.write(s1);
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
+22 -11
View File
@@ -3,7 +3,8 @@ package cn.hellohao.utils;
import cn.hellohao.exception.StorageSourceInitException;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.service.impl.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.Map;
@@ -13,15 +14,25 @@ import java.util.Map;
* @version 1.0
* @date 2019/11/7 17:12
*/
@Service
public class GetSource {
public static ReturnImage storageSource(Integer type, Map<String, File> fileMap, String userpath,Integer keyID){
NOSImageupload nosImageupload = SpringContextHolder.getBean(NOSImageupload.class);
OSSImageupload ossImageupload = SpringContextHolder.getBean(OSSImageupload.class);
USSImageupload ussImageupload = SpringContextHolder.getBean(USSImageupload.class);
KODOImageupload kodoImageupload = SpringContextHolder.getBean(KODOImageupload.class);
COSImageupload cosImageupload = SpringContextHolder.getBean(COSImageupload.class);
FTPImageupload ftpImageupload = SpringContextHolder.getBean(FTPImageupload.class);
UFileImageupload uFileImageupload = SpringContextHolder.getBean(UFileImageupload.class);
@Autowired
NOSImageupload nosImageupload;
@Autowired
OSSImageupload ossImageupload;
@Autowired
USSImageupload ussImageupload;
@Autowired
KODOImageupload kodoImageupload;
@Autowired
COSImageupload cosImageupload;
@Autowired
FtpServiceImpl ftpService;
@Autowired
S3Imageupload s3Imageupload;
public ReturnImage storageSource(Integer type, Map<Map<String, String>, File> fileMap, String userpath,Integer keyID){
ReturnImage returnImage = null;
try {
if(type==1){
@@ -37,9 +48,9 @@ public class GetSource {
}else if(type==6){
returnImage = cosImageupload.ImageuploadCOS(fileMap, userpath,keyID);;
}else if(type==7){
returnImage = ftpImageupload.ImageuploadFTP(fileMap, userpath,keyID);
returnImage = ftpService.FtpUploadFile(fileMap, userpath,keyID);
}else if(type==8){
returnImage = uFileImageupload.ImageuploadUFile(fileMap, userpath,keyID);
returnImage = s3Imageupload.ImageuploadS3(fileMap, userpath,keyID);
}
else{
new StorageSourceInitException("GetSource类捕捉异常:未找到存储源");
@@ -104,7 +104,7 @@ public class ImgUrlUtil {
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(5*1000);
//防止屏蔽程序抓取而返回403错误
//防止屏蔽程序抓取而返回403错误 Referer
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
@@ -4,15 +4,10 @@ import cn.hellohao.config.GlobalConstant;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.pojo.UploadConfig;
import cn.hellohao.service.impl.KeysServiceImpl;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class LocUpdateImg {
public static boolean deleteLOCImg(Images images){
@@ -20,7 +15,11 @@ public class LocUpdateImg {
try {
String filePath = GlobalConstant.LOCPATH + File.separator+images.getImgname();
File file = new File(filePath);
isDele = file.delete();
if(file.exists()){
isDele = file.delete();
}else{
isDele = true;
}
}catch (Exception e){
e.printStackTrace();
isDele = false;
@@ -28,43 +27,35 @@ public class LocUpdateImg {
return isDele;
}
public static ReturnImage ImageuploadLOC(Map<String, File> fileMap, String username,Integer keyID) throws Exception {
KeysServiceImpl keysService = SpringContextHolder.getBean(KeysServiceImpl.class);
final Keys key = keysService.selectKeys(keyID);
public static ReturnImage ImageuploadLOC(
Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage();
String filePath =GlobalConstant.LOCPATH + File.separator;
File file = null;
for (Map.Entry<String, File> entry : fileMap.entrySet()) {
String ShortUID = SetText.getShortUuid();
System.out.println("待上传的图片:"+username + File.separator + ShortUID + "." + entry.getKey());
File dest = new File(filePath + username + File.separator+ ShortUID + "." + entry.getKey());
File temppath = new File(filePath + username+ File.separator );
String filePath = GlobalConstant.LOCPATH + File.separator;
try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name");
File dest = new File(filePath + username + File.separator + ShortUIDName + "." + prefix);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
dest.getParentFile().mkdirs();
}
try {
InputStream fileInputStream = new FileInputStream(entry.getValue());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
byte[] bs = new byte[1024];
int len;
while ((len = fileInputStream.read(bs)) != -1) {
bos.write(bs, 0, len);
}
bos.flush();
bos.close();
returnImage.setImgname(username + "/" +ShortUID + "." + entry.getKey());//entry.getValue().getOriginalFilename()
returnImage.setImgurl(key.getRequestAddress() +"/ota/"+username + "/" + ShortUID + "." + entry.getKey());
returnImage.setImgSize(entry.getValue().length());
returnImage.setCode("200");
} catch (IOException e) {
e.printStackTrace();
returnImage.setCode("500");
System.err.println("上传失败");
InputStream fileInputStream = new FileInputStream(entry.getValue());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
byte[] bs = new byte[1024];
int len;
while ((len = fileInputStream.read(bs)) != -1) {
bos.write(bs, 0, len);
}
bos.flush();
bos.close();
}
returnImage.setCode("200");
} catch (Exception e) {
e.printStackTrace();
returnImage.setCode("500");
System.err.println("上传失败");
}
return returnImage;
}
}
@@ -1,14 +1,15 @@
package cn.hellohao.utils;
import cn.hellohao.pojo.Config;
import cn.hellohao.pojo.EmailConfig;
import cn.hellohao.pojo.Msg;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.HexUtil;
import com.alibaba.fastjson.JSONObject;
import com.mitchellbosecke.pebble.PebbleEngine;
import com.mitchellbosecke.pebble.template.PebbleTemplate;
import io.github.biezhi.ome.OhMyEmail;
import org.springframework.core.io.ClassPathResource;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
@@ -18,7 +19,7 @@ import java.util.UUID;
public class NewSendEmail {
public static Integer sendEmail(EmailConfig emailConfig, String username, String uid, String toEmail, Config config) {
public static Integer sendEmail(EmailConfig emailConfig, String username, String uid, String toEmail, JSONObject jsonObject) {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
@@ -33,8 +34,8 @@ public class NewSendEmail {
// OhMyEmail.config(OhMyEmail.SMTP_QQ(false), "xxxx@qq.com", "your@password");
OhMyEmail.config(props, emailConfig.getEmails(), emailConfig.getEmailkey());
String webname=config.getWebname();
String domain = config.getDomain();
String webname=jsonObject.getString("webname");
String domain = jsonObject.getString("domain");
try {
//生成模板
PebbleEngine engine = new PebbleEngine.Builder().build();
@@ -90,7 +91,7 @@ public class NewSendEmail {
}
public static Integer sendEmailFindPass(EmailConfig emailConfig,String username, String uid, String toEmail, Config config) {
public static Integer sendEmailFindPass(EmailConfig emailConfig,String username, String uid, String toEmail, JSONObject jsonObject) {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true");
@@ -103,8 +104,8 @@ public class NewSendEmail {
// 配置一次即可,可以配置为静态方法
// OhMyEmail.config(OhMyEmail.SMTP_QQ(false), "xxxx@qq.com", "your@password");
OhMyEmail.config(props, emailConfig.getEmails(), emailConfig.getEmailkey());
String webname=config.getWebname();
String domain = config.getDomain();
String webname=jsonObject.getString("webname");
String domain = jsonObject.getString("domain");
String new_pass = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,10);
try {
//生成模板
@@ -1,11 +1,6 @@
package cn.hellohao.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.ScriptRunner;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
final class RunSqlScript {
@@ -1,9 +1,16 @@
package cn.hellohao.utils;
import cn.hellohao.pojo.Chunk;
import cn.hellohao.pojo.Msg;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.text.DecimalFormat;
import java.util.stream.Stream;
public class SetFiles {
// 转换文件方法
@@ -78,7 +85,73 @@ public class SetFiles {
return fileSizeString;
}
public static String generatePath(String uploadFolder, Chunk chunk) {
StringBuilder sb = new StringBuilder();
sb.append(uploadFolder+File.separator).append("/").append(chunk.getIdentifier());
if (!Files.isWritable(Paths.get(sb.toString()))) {
System.err.println("path not exist,create path");
System.err.println(sb.toString());
try {
Files.createDirectories(Paths.get(sb.toString()));
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.append("/")
.append(chunk.getFilename())
.append("-")
.append(chunk.getChunkNumber()).toString();
}
public static Msg merge(String targetFile, String folder, String filename) {
Msg msg = new Msg();
try {
final File file = new File(targetFile);
if (file.exists()){
file.delete();
}
Files.createFile(Paths.get(targetFile));
} catch (IOException e) {
System.out.println("这是一个无伤大雅的错:IOException");
e.printStackTrace();
}
try (Stream<Path> stream = Files.list(Paths.get(folder))) {
stream.filter(path -> !path.getFileName().toString().equals(filename))
.sorted((o1, o2) -> {
String p1 = o1.getFileName().toString();
String p2 = o2.getFileName().toString();
int i1 = p1.lastIndexOf("-");
int i2 = p2.lastIndexOf("-");
return Integer.valueOf(p2.substring(i2)).compareTo(Integer.valueOf(p1.substring(i1)));
})
.forEach(path -> {
try {
//以追加的形式写入文件
Files.write(Paths.get(targetFile), Files.readAllBytes(path), StandardOpenOption.APPEND);
//合并后删除该块
Files.delete(path);
} catch (IOException e) {
msg.setCode("500");
msg.setInfo("合并文件时发生了错误");
e.printStackTrace();
}
});
} catch (IOException e) {
msg.setCode("500");
msg.setInfo("合并文件时发生了错误");
e.printStackTrace();
}
return msg;
}
public static void delFileFolder(File file){
if (file.isDirectory()){
File[] files = file.listFiles();
for (File in: files) {
delFileFolder(in);
}
}
file.delete();
}
}
@@ -1,64 +1,6 @@
package cn.hellohao.utils;
import cn.hellohao.pojo.Keys;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;
public class StringUtils {
//此方法目前未使用2020-04-06
public static Boolean doNull(Integer sourcekey,Keys k) {
if(sourcekey==1){
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ){
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ){
return true;
}
}
}else if(sourcekey==2){
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) {
return true;
}
}
}else if(sourcekey==3){
if(k.getEndpoint()!=null && k.getAccessSecret()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) {
return true;
}
}
}else if(sourcekey==4){
if (k.getEndpoint() != null && k.getAccessSecret() != null && k.getEndpoint() != null
&& k.getBucketname() != null && k.getRequestAddress() != null) {
if (!k.getEndpoint().equals("") && !k.getAccessSecret() .equals("") && !k.getEndpoint() .equals("")
&& !k.getBucketname() .equals("") && !k.getRequestAddress().equals("")) {
return true;
}
}
}else if(sourcekey==6){
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("")
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) {
return true;
}
}
}else if(sourcekey==7){
if(k.getEndpoint()!=null && k.getAccessSecret()!=null && k.getEndpoint()!=null && k.getRequestAddress()!=null ) {
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("") && !k.getEndpoint().equals("") && !k.getRequestAddress().equals("") ) {
return true;
}
}
}
return false;
}
/**
* 移除 URL 中的第一个 '/'
* @return 如 path = '/folder1/file1', 返回 'folder1/file1'
@@ -4,26 +4,22 @@ import java.util.ArrayList;
import java.util.List;
public class MyProgress {
//删除图片时候的数据
private int delSuccessCount=0;//已经成功的个数
private List<String> delErrorImgListt = new ArrayList<>();//已经失败的图片
private boolean delOCT=false; //控制开关
private List<Integer> delSuccessImgList = new ArrayList<>(); //删除成功的图片
private int delOCT=0; //控制开关
private List<Long> delSuccessImgList = new ArrayList<>(); //删除成功的图片
public void InitializeDelImg(){
//删除图片时候的数据
this.delSuccessCount=0;//已经成功的个数
this.delErrorImgListt = new ArrayList<>();//已经失败的图片
this.delOCT=false; //控制开关
this.delOCT=0; //控制开关 0代表false 1代表true
this.delSuccessImgList = new ArrayList<>(); //删除成功的图片
}
public MyProgress() {
}
public MyProgress(int delSuccessCount, List<String> delErrorImgListt, boolean delOCT, List<Integer> delSuccessImgList) {
public MyProgress(int delSuccessCount, List<String> delErrorImgListt, int delOCT, List<Long> delSuccessImgList) {
this.delSuccessCount = delSuccessCount;
this.delErrorImgListt = delErrorImgListt;
this.delOCT = delOCT;
@@ -46,29 +42,21 @@ public class MyProgress {
this.delErrorImgListt = delErrorImgListt;
}
public boolean getDelOCT() {
public int getDelOCT() {
return delOCT;
}
public void setDelOCT(boolean delOCT) {
public void setDelOCT(int delOCT) {
this.delOCT = delOCT;
}
public List<Integer> getDelSuccessImgList() {
public List<Long> getDelSuccessImgList() {
return delSuccessImgList;
}
public void setDelSuccessImgList(List<Integer> delSuccessImgList) {
public void setDelSuccessImgList(List<Long> delSuccessImgList) {
this.delSuccessImgList = delSuccessImgList;
}
@Override
public String toString() {
return "MyProgress{" +
", delSuccessCount=" + delSuccessCount +
", delErrorImgListt=" + delErrorImgListt +
", delOCT=" + delOCT +
", delSuccessImgList=" + delSuccessImgList +
'}';
}
}
+17 -11
View File
@@ -1,31 +1,36 @@
DockerWebHost=${HELLOHAO_SERVER_HOST:null}
#端口
server.port=10088
#前端域名需要带协议头http(s)://
CROS_ALLOWED_ORIGINS=${HELLOHAO_WEB_HOST:http://127.0.0.1:8080}
#数据库账号
spring.datasource.username=root
#数据库密码test
spring.datasource.password=root
spring.datasource.password=${MYSQL_PASS:root}
#数据库链接地址
spring.datasource.url=jdbc:mysql://localhost:3306/tbed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#端口
server.port=8089
#前端域名需要带协议头http(s)://
CROS_ALLOWED_ORIGINS=http://127.0.0.1:8080
spring.datasource.url=${MYSQL_URL:jdbc:mysql://127.0.0.1:3306/tbed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8}
#MySQL Driver 无需修改
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.redis.host= 127.0.0.1
spring.redis.port=6379
## 设置最大连接数,0为无限
spring.redis.pool.max-active=8
# 连接超时时间(毫秒)
spring.redis.timeout=5000
spring.redis.password=
#下边的配置项不需要修改。
#logging.config=classpath:logback-spring.xml
#logging.file.path=/HellohaoData/tbedlog
spring.thymeleaf.suffix=.html
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
logging.level.cn.hellohao.dao=debug
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.thymeleaf.cache=false
multipart.maxFileSize=10240KB
multipart.maxRequestSize=10240KB
spring.thymeleaf.mode = LEGACYHTML5
spring.http.multipart.location=/data/upload_tmp
systemupdate=2020-05-26
spring.datasource.druid.filter.config.enabled=false
@@ -43,4 +48,5 @@ spring.datasource.druid.stat-view-servlet.login-username=hellohao@dealer
spring.datasource.druid.stat-view-servlet.login-password=52BNmXPJL0rQQ3CU
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
spring.datasource.druid.web-stat-filter.exclusions=false
#log4j.logger.cn.hellohao.dao=DEBUG
log4j2.formatMsgNoLookups=True
+1 -1
View File
@@ -5,7 +5,7 @@
\/ /_/ \___|_|_|\___/|_| |_|\__,_|\___/
__________________________________________
HellohaoBloghttp://www.hellohao.cn
Hellohao图像托管https://www.hellohao.cn
__________________________________________
//
+121 -174
View File
@@ -1,197 +1,144 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<!-- 级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
<!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!-- 动态日志级别 -->
<jmxConfigurator/>
<property name="log.path" value="/HellohaoData/tbedlog" />
<!-- 定义日志文件 输出位置 -->
<property name="log.log_dir" value="logs"/>
<property name="log.log_name" value="log"/>
<!-- 日志最大的历史 30天 -->
<property name="log.maxHistory" value="30"/>
<property name="log.level" value="debug"/>
<property name="log.maxSize" value="5MB" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--输出到控制台-->
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- &lt;!&ndash; 设置过滤级别 &ndash;&gt;-->
<!-- <level>INFO</level>-->
<!-- &lt;!&ndash; 用于配置符合过滤条件的操作 &ndash;&gt;-->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- &lt;!&ndash; 用于配置不符合过滤条件的操作 &ndash;&gt;-->
<!-- <onMismatch>DENY</onMismatch>-->
<!-- </filter>-->
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
<pattern>
<!-- 设置日志输出格式 -->
<!-- 日期 [线程] [class类]-[日志级别] log内容 -->
%blue(%d{yyyy-MM-dd HH:mm:ss,SSS}) [%cyan(%t)] [%yellow(%c)]-[%highlight(%p)] %m%n
</pattern>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动输出 level为 DEBUG 日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_debug.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 -->
<fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_info.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 WARN 日志 -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_warn.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_error.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<!-- 过滤器,只记录WARN级别的日志 -->
<!-- 果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置过滤级别 -->
<level>ERROR</level>
<!-- 用于配置符合过滤条件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>
${log.log_dir}/error/%d{yyyy-MM-dd}/error_${log.log_name}-%i.log
</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,且<maxHistory>是6
则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
<maxHistory>${log.maxHistory}</maxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>${log.maxSize}</MaxFileSize>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>
<!-- 设置日志输出格式 -->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</encoder>
</appender>
<!-- INFO级别日志 appender -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_info.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.log_dir}/info/%d{yyyy-MM-dd}/info_${log.log_name}-%i.log</fileNamePattern>
<maxHistory>${log.maxHistory}</maxHistory>
<MaxFileSize>${log.maxSize}</MaxFileSize>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>
</encoder>
</appender>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、
以及指定<appender>。<logger>仅有一个name属性,
一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。
-->
<!--<logger name="org.springframework.web" level="info"/>-->
<!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
<!--
使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-->
<!-- DEBUG级别日志 appender -->
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_debug.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.log_dir}/debug/%d{yyyy-MM-dd}/debug_${log.log_name}-%i.log</fileNamePattern>
<maxHistory>${log.maxHistory}</maxHistory>
<MaxFileSize>${log.maxSize}</MaxFileSize>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>
</encoder>
</appender>
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<!--设置一个向上传递的appender,所有级别的日志都会输出-->
<!-- <appender name="app" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
<!-- <fileNamePattern>${log.log_dir}/app/%d{yyyy-MM-dd}/app_${log.log_name}-%i.log</fileNamePattern>-->
<!-- <maxHistory>${log.maxHistory}</maxHistory>-->
<!-- <MaxFileSize>${log.maxSize}</MaxFileSize>-->
<!-- <cleanHistoryOnStart>true</cleanHistoryOnStart>-->
<!-- </rollingPolicy>-->
<!-- <encoder>-->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern>-->
<!-- </encoder>-->
<!-- </appender>-->
<!--开发环境:打印控制台-->
<springProfile name="dev">
<logger name="cn.hellohao.dao" level="debug"/>
</springProfile>
<root level="info">
<!--name包下的类的日志输出-->
<logger name="cn.hellohao" additivity="false" level="DEBUG" >
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
<appender-ref ref="INFO" />
<appender-ref ref="DEBUG" />
<appender-ref ref="ERROR" />
</logger>
<logger name="proxy.system.log" additivity="false">
<appender-ref ref="INFO" />
<appender-ref ref="DEBUG" />
<appender-ref ref="ERROR" />
</logger>
<!--生产环境:输出到文件-->
<!--<springProfile name="pro">-->
<!--<root level="info">-->
<!--<appender-ref ref="CONSOLE" />-->
<!--<appender-ref ref="DEBUG_FILE" />-->
<!--<appender-ref ref="INFO_FILE" />-->
<!--<appender-ref ref="ERROR_FILE" />-->
<!--<appender-ref ref="WARN_FILE" />-->
<!--</root>-->
<!--</springProfile>-->
</configuration>
<!-- root级别 DEBUG -->
<!-- <root level="DEBUG">-->
<!-- </root>-->
</configuration>
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.hellohao.dao.ConfdataMapper">
<select id="selectConfdata" resultType="cn.hellohao.pojo.Confdata">
select * from confdata where `key`=#{key}
</select>
<update id="updateConfdata" parameterType="cn.hellohao.pojo.Confdata">
UPDATE confdata
<set>
<if test="jsondata != null">
jsondata = #{jsondata},
</if>
</set>
where `key`=#{key}
</update>
</mapper>
@@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.hellohao.dao.ConfigMapper">
<select id="getSourceype" resultType="cn.hellohao.pojo.Config">
select * from config where id = 1
</select>
<update id="setSourceype" parameterType="cn.hellohao.pojo.Config">
UPDATE config
<set>
<if test="sourcekey != null">
sourcekey = #{sourcekey},
</if>
<if test="emails != null">
emails = #{emails},
</if>
<if test="webname != null">
webname = #{webname},
</if>
<if test="explain != null">
`explain` = #{explain},
</if>
<if test="video != null">
`video` = #{video},
</if>
<if test="backtype != null">
`backtype` = #{backtype},
</if>
<if test="links != null">
`links` = #{links},
</if>
<if test="notice != null">
`notice` = #{notice},
</if>
<if test="baidu != null">
`baidu` = #{baidu},
</if>
<if test="domain != null">
`domain` = #{domain},
</if>
<if test="background1 != null">
`background1` = #{background1},
</if>
<if test="background2 != null">
`background2` = #{background2},
</if>
<if test="sett != null">
`sett` = #{sett},
</if>
<if test="webms != null">
`webms` = #{webms},
</if>
<if test="webkeywords != null">
`webkeywords` = #{webkeywords},
</if>
<if test="webfavicons != null">
`webfavicons` = #{webfavicons},
</if>
<if test="theme != null">
`theme` = #{theme},
</if>
<if test="websubtitle != null">
websubtitle = #{websubtitle},
</if>
<if test="logo != null">
logo = #{logo},
</if>
<if test="aboutinfo != null">
aboutinfo = #{aboutinfo},
</if>
</set>
where id=1
</update>
</mapper>
+41 -3
View File
@@ -67,17 +67,48 @@
and
a.imguid = #{imguid}
</if>
<if test="searchname != null">
and CONCAT(
imgurl,
idname
) LIKE '%${searchname}%'
</if>
<if test="idname != null and idname !=''">
and idname LIKE '%${idname}%'
</if>
order by a.id desc
</select>
<insert id="insertImgData" parameterType="cn.hellohao.pojo.Images">
INSERT INTO imgdata (
id,
imgname,
imgurl,
userid,
updatetime,
sizes,
abnormal,
`source`,
imgtype,
explains,
md5key,
imguid,
`format`,
about,
violation,
idname
)
VALUES (null, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype},
#{explains},#{md5key},#{imguid},#{format},#{about},null,#{idname})
</insert>
<!-- 此用户下总数 -->
<select id="countimg" parameterType="integer" resultType="integer">
select count(*) from imgdata where userid = #{userid}
</select>
<delete id="deleimg" parameterType="integer">
<delete id="deleimg" parameterType="Long">
DELETE FROM imgdata WHERE id=#{id}
</delete>
@@ -85,7 +116,7 @@
DELETE FROM imgdata WHERE imguid = #{imguid}
</delete>
<select id="selectByPrimaryKey" parameterType="integer" resultType="cn.hellohao.pojo.Images">
<select id="selectByPrimaryKey" parameterType="Long" resultType="cn.hellohao.pojo.Images">
select * from imgdata where id = #{id}
</select>
@@ -110,6 +141,10 @@
<if test="idname!=null and idname!=''">
idname=#{idname}
</if>
<if test="violation!=null and violation!=''">
violation=#{violation}
</if>
</set>
where imgname=#{imgname}
</update>
@@ -119,7 +154,7 @@
</delete>
<!-- 批量删除-->
<delete id="deleall" parameterType="integer">
<delete id="deleall" parameterType="Long">
DELETE FROM imgdata WHERE id = #{id}
</delete>
@@ -142,6 +177,9 @@
<select id="selectImgUrlByMD5" parameterType="string" resultType="cn.hellohao.pojo.Images">
select imgname,imgurl from imgdata where md5key = #{md5key}
<if test="userid != null">
and userid = #{userid}
</if>
</select>
<!-- 查询当前用户的近20条数据-->
+4 -2
View File
@@ -27,7 +27,7 @@
WHEN storageType=5 THEN '本地'
WHEN storageType=6 THEN '腾讯云'
WHEN storageType=7 THEN 'FTP'
WHEN storageType=8 THEN 'UFile'
WHEN storageType=8 THEN 'S3协议'
ELSE '未知' END AS storageName,
keyname
FROM `keys` GROUP BY storageType,id,storageName,keyname
@@ -49,7 +49,9 @@
Endpoint = #{Endpoint},
Bucketname = #{Bucketname},
RequestAddress = #{RequestAddress},
keyname = #{keyname}
keyname = #{keyname},
Region = #{Region},
RootPath = #{RootPath}
WHERE
storageType = #{storageType}
</update>
+4 -4
View File
@@ -116,10 +116,10 @@
</select>
<!-- 插入图片信息 -->
<insert id="insertimg" parameterType="cn.hellohao.pojo.Images">
INSERT INTO imgdata (id, imgname, imgurl, userid, updatetime,sizes,abnormal,source,imgtype,md5key,imguid,format,about,violation,idname)
VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype},#{md5key},#{imguid},#{format},#{about},null,#{idname})
</insert>
<!-- <insert id="insertimg" parameterType="cn.hellohao.pojo.Images">-->
<!-- INSERT INTO imgdata (id, imgname, imgurl, userid, updatetime,sizes,abnormal,source,imgtype,md5key,imguid,format,about,violation)-->
<!-- VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype},#{md5key},#{imguid},#{format},#{about},null)-->
<!-- </insert>-->
<!-- 修改资料 -->
<update id="change" parameterType="cn.hellohao.pojo.User">
+64
View File
@@ -0,0 +1,64 @@
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>Welcome</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
line-height: 1.2;
margin: 0;
}
html {
color: #888;
display: table;
font-family: sans-serif;
height: 100%;
text-align: center;
width: 100%;
}
body {
display: table-cell;
vertical-align: middle;
margin: 2em auto;
}
h1 {
color: #555;
font-size: 2em;
font-weight: 400;
}
p {
margin: 0 auto;
width: 280px;
}
@media only screen and (max-width: 280px) {
body, p {
width: 95%;
}
h1 {
font-size: 1.5em;
margin: 0 0 0.3em;
}
}
</style>
</head>
<body>
<h1 style="font-size: 4.5em;" th:text="'Welcome'"></h1>
<br />
<h3 style="line-height: 80px;" th:text="${name}"></h3>
<p th:text="'服务版本:'+${version}"></p>
<p th:text="'来访者IP'+${ip}"></p>
<a style="font-weight: bold; line-height: 80px;" th:href="'http://'+${links}" th:text="${links}"></a>
</body>
</html>
<!-- IE needs 512+ bytes: https://blogs.msdn.microsoft.com/ieinternals/2010/08/18/friendly-http-error-pages/ -->