25 Commits
Author SHA1 Message Date
tiansh 75d753c53c :fire:修复部分情况不能部署成功问题 2024-03-20 15:10:00 +08:00
tiansh 677c53104a :fire:修复部分情况不能部署成功问题 2024-03-19 17:28:40 +08:00
tiansh 113e69fff2 :fire:优化代码 2024-03-19 11:17:05 +08:00
tiansh 0ede684acb :fire:优化代码 2024-03-11 09:27:07 +08:00
tiansh f0dd1d0db8 📝 2024-01-30 18:47:18 +08:00
tiansh 59aaaa1c82 update:优化上传逻辑,减少性能占用 2024-01-30 18:45:01 +08:00
tiansh f990c4cd80 update:优化上传逻辑,减少性能占用 2024-01-29 17:37:46 +08:00
tiansh 369b88ffb3 update:优化线程池 2024-01-26 09:13:42 +08:00
tiansh bfa41ac049 add:新增webdav相关功能,修复安全隐患 2024-01-24 17:23:37 +08:00
tiansh ca0da1dd06 add:新增webdav相关功能,修复安全隐患 2024-01-23 17:44:21 +08:00
tiansh 44814e79b0 add:新增webdav相关功能,修复安全隐患 2024-01-23 17:41:51 +08:00
hellohao f02d865389 适配WebDAV ing 2024-01-22 22:19:07 +08:00
tiansh 48b0e1c5ca add:新增webdav相关功能 2024-01-22 17:34:47 +08:00
tiansh a04bbc1ea6 📝 2024-01-22 11:26:06 +08:00
tiansh 31b4426c10 📝 2024-01-22 11:13:26 +08:00
tiansh 766c125673 📝 2024-01-22 11:12:27 +08:00
tiansh 0de7e0e0fc 📝 2024-01-22 11:10:06 +08:00
tiansh f24a2d5557 📝 2024-01-22 11:09:21 +08:00
tiansh 87394258ad 📝 2024-01-22 11:08:40 +08:00
hello-hao 89a66a17b3 📝 2024-01-11 17:42:23 +08:00
hello-hao 3e4c90c8d9 :bug:修复上传失败问题 2024-01-11 17:03:48 +08:00
hello-hao fb9f2a896e 📝 2024-01-03 14:00:17 +08:00
hello-hao 9ca8695cfd 📝 2024-01-03 13:59:15 +08:00
hellohao 33d4990ded 更新文档 2024-01-02 23:39:13 +08:00
hello-hao 679ada60bc feat:添加强制删除,优化七牛云对接 2024-01-02 17:33:01 +08:00
49 changed files with 873 additions and 471 deletions
-6
View File
@@ -1,6 +0,0 @@
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java
+20 -15
View File
@@ -1,12 +1,23 @@
# Hellohao图像托管程序 - 也许这会是最优秀的图程序 # Hellohao图像托管 - 也许这会是最优秀的图像托管程序
![宣传图Banner](https://upload.cc/i1/2022/02/11/HSg5tX.png)
<p align="center">
<a href="https://www.hellohao.cn/" target="_blank">
<img width="1920px" src="https://upload.cc/i1/2022/02/11/HSg5tX.png">
</a>
</p>
![Visual Studio Marketplace Rating (Stars)](https://img.shields.io/visual-studio-marketplace/stars/ritwickdey.LiveServer?style=flat-square) ![Visual Studio Marketplace Rating (Stars)](https://img.shields.io/visual-studio-marketplace/stars/ritwickdey.LiveServer?style=flat-square)
![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/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) ![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)
<h3 align="center">赞助商</h3>
<p align="center">
<a href="https://www.eltyun.com/" target="_blank">
<img width="350px" src="https://t.tdo.ink/hellohao/s9ugmihq.png">
</a>
</p>
>:exclamation: 托管的所有开源代码可能存在作者修改/测试/调整等行为,均为实验性代码,故并不保证程序或功能的可用性,如果你想要部署程序,请下载我们提供的编译整合包进行安装部署。 >:exclamation: 托管的所有开源代码可能存在作者修改/测试/调整等行为,均为实验性代码,故并不保证程序或功能的可用性,如果你想要部署程序,请下载我们提供的编译整合包进行安装部署。
@@ -27,13 +38,12 @@
[Core版](https://hellohao.cn):开源版的基础上增加`Backblaze(B2)` 并且可`同个对象存储商家`可开多个存储源(可添加至90+存储源) [Core版](https://hellohao.cn):开源版的基础上增加`Backblaze(B2)` 并且可`同个对象存储商家`可开多个存储源(可添加至90+存储源)
### 更新日志 `20230925`
- 修复一些sql异常错误的问题 ### 更新日志 `20240319`
- 修复部分部署场景部署不成功的问题
- 提高系统稳定性
[^_^]: 程序宣传视频:[自制宣传视频](https://www.bilibili.com/video/BV11r4y1y7mH/)
### 主要功能 ### 主要功能
@@ -141,6 +151,8 @@
更多部署教程参考程序[相关文档](http://doc.hellohao.cn) 更多部署教程参考程序[相关文档](http://doc.hellohao.cn)
更强大的功能可[购买Core版](http://tbed.hellohao.cn/pay)程序
### 启动项目 ### 启动项目
> 访问你的前端域名即可 > 访问你的前端域名即可
@@ -162,12 +174,6 @@
![站点设置](https://upload.cc/i1/2022/02/11/Hj7pWM.png) ![站点设置](https://upload.cc/i1/2022/02/11/Hj7pWM.png)
[^_^]: ![首页](http://img.wwery.com/Hellohao/xI9TSKcI.png)
[^_^]: ![控制台详情](http://img.wwery.com/Hellohao/klytOMWr.png)
[^_^]: ![相册](http://img.wwery.com/Hellohao/2UQkXTHw.png)
[^_^]: ![多存储源](http://img.wwery.com/Hellohao/xXSMlsTg.png)
[^_^]: ![站点设置](http://img.wwery.com/Hellohao/n5zXistG.png)
### 桌面客户端(win/mac) ### 桌面客户端(win/mac)
> 获取地址:[官网获取](https://www.hellohao.cn/app) > 获取地址:[官网获取](https://www.hellohao.cn/app)
@@ -182,7 +188,7 @@
![Hellohao图像托管](https://hellohao.cn/newassets/img/twechat.png) ![Hellohao图像托管](https://hellohao.cn/newassets/img/twechat.png)
[//]: # (![Hellohao图像托管]&#40;https://upload.cc/i1/2022/03/28/Vnp0bT.png&#41;) [//]: # "![Hellohao图像托管]&#40;https://upload.cc/i1/2022/03/28/Vnp0bT.png&#41;"
### 运行环境 ### 运行环境
@@ -229,4 +235,3 @@ Hellohao图像托管已申请[**中国国家版权局计算机软件著作权**]
**如需程序定制或其他业务,请与我们取得联系** **如需程序定制或其他业务,请与我们取得联系**
[Hellohao图像托管官网](http://hellohao.cn) [Hellohao图像托管官网](http://hellohao.cn)
+12 -2
View File
@@ -130,7 +130,17 @@
<artifactId>spring-boot-starter-mail</artifactId> <artifactId>spring-boot-starter-mail</artifactId>
<version>2.5.1</version> <version>2.5.1</version>
</dependency> </dependency>
<!-- webdav-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>com.github.lookfirst</groupId>
<artifactId>sardine</artifactId>
<version>5.10</version>
</dependency>
<dependency> <dependency>
<groupId>com.baidu.aip</groupId> <groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId> <artifactId>java-sdk</artifactId>
@@ -238,7 +248,7 @@
<configuration> <configuration>
<testFailureIgnore>true</testFailureIgnore> <testFailureIgnore>true</testFailureIgnore>
</configuration> </configuration>
</plugin> </plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin>
</plugins> </plugins>
</build> </build>
@@ -17,6 +17,8 @@ import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement; import javax.servlet.MultipartConfigElement;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.net.InetAddress;
import java.net.Socket;
import java.util.stream.Stream; import java.util.stream.Stream;
@SpringBootApplication @SpringBootApplication
@@ -35,7 +35,6 @@ public class SubjectFilter extends BasicHttpAuthenticationFilter {
String serviceName = httpServletRequest.getServletPath();//获取接口 String serviceName = httpServletRequest.getServletPath();//获取接口
String Users_Origin = httpServletRequest.getHeader("usersOrigin"); String Users_Origin = httpServletRequest.getHeader("usersOrigin");
String token = httpServletRequest.getHeader("Authorization"); String token = httpServletRequest.getHeader("Authorization");
//验证前端域名
if(httpServletRequest.getMethod().equals("POST") && !serviceName.contains("/api") && !serviceName.contains("/verifyCode") if(httpServletRequest.getMethod().equals("POST") && !serviceName.contains("/api") && !serviceName.contains("/verifyCode")
&& !serviceName.contains("/getClientVersion") && !serviceName.contains("/client")){ && !serviceName.contains("/getClientVersion") && !serviceName.contains("/client")){
try{ try{
@@ -75,7 +74,6 @@ public class SubjectFilter extends BasicHttpAuthenticationFilter {
Subject subject = SecurityUtils.getSubject(); Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken tokenOBJ = new UsernamePasswordToken(userData.getEmail(),userData.getPassword()); UsernamePasswordToken tokenOBJ = new UsernamePasswordToken(userData.getEmail(),userData.getPassword());
tokenOBJ.setRememberMe(true); tokenOBJ.setRememberMe(true);
//执行登录方法,如果没有异常,说明登录成功
subject.login(tokenOBJ); subject.login(tokenOBJ);
SecurityUtils.getSubject().getSession().setTimeout(3600000); SecurityUtils.getSubject().getSession().setTimeout(3600000);
User loginUser = (User) SecurityUtils.getSubject().getPrincipal(); User loginUser = (User) SecurityUtils.getSubject().getPrincipal();
@@ -102,7 +100,6 @@ public class SubjectFilter extends BasicHttpAuthenticationFilter {
subject.login(tokenOBJ); subject.login(tokenOBJ);
SecurityUtils.getSubject().getSession().setTimeout(3600000);//一小时 SecurityUtils.getSubject().getSession().setTimeout(3600000);//一小时
} catch (Exception e) { } catch (Exception e) {
// System.err.println("拦截器,登录失败,false");
this.CODE = "403"; this.CODE = "403";
return false; return false;
} }
@@ -33,6 +33,7 @@ public class ShiroConfig {
filterMap.put("/verifyCodeForRetrieve","anon"); filterMap.put("/verifyCodeForRetrieve","anon");
filterMap.put("/verifyCodeFortowSendEmail","anon"); filterMap.put("/verifyCodeFortowSendEmail","anon");
filterMap.put("/api/**","anon"); filterMap.put("/api/**","anon");
filterMap.put("/w/**","anon");
filterMap.put("/user/**","anon"); filterMap.put("/user/**","anon");
filterMap.put("/ota/**","anon"); filterMap.put("/ota/**","anon");
filterMap.put("/admin/root/**","roles[admin]"); filterMap.put("/admin/root/**","roles[admin]");
@@ -16,9 +16,9 @@ public class PoolConfig {
@Bean(name = "taskExecutor") @Bean(name = "taskExecutor")
public ThreadPoolTaskExecutor taskExecutor() { public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(properties.getCorePoolSize()); executor.setCorePoolSize(properties.getCorePoolSize()); //设置核心线程数
executor.setMaxPoolSize(properties.getMaxPoolSize()); executor.setMaxPoolSize(properties.getMaxPoolSize()); //设置最大线程数
executor.setQueueCapacity(properties.getQueueCapacity()); executor.setQueueCapacity(properties.getQueueCapacity()); //设置队列容量
executor.setThreadNamePrefix(properties.getThreadNamePrefix()); executor.setThreadNamePrefix(properties.getThreadNamePrefix());
executor.setKeepAliveSeconds(properties.getKeepAliveTime()); executor.setKeepAliveSeconds(properties.getKeepAliveTime());
executor.setWaitForTasksToCompleteOnShutdown(properties.isWaitForTasksToCompleteOnShutdown()); executor.setWaitForTasksToCompleteOnShutdown(properties.isWaitForTasksToCompleteOnShutdown());
@@ -42,7 +42,7 @@ public class PoolConfig {
private int corePoolSize = 5; private int corePoolSize = 5;
private int maxPoolSize = 50; private int maxPoolSize = 50;
private int keepAliveTime = 15; private int keepAliveTime = 15;
private int queueCapacity = 6; private int queueCapacity = 10;
private String threadNamePrefix = "Tbed-Thread"; private String threadNamePrefix = "Tbed-Thread";
private boolean allowCoreThreadTimeout = false; private boolean allowCoreThreadTimeout = false;
private boolean waitForTasksToCompleteOnShutdown = false; private boolean waitForTasksToCompleteOnShutdown = false;
@@ -7,7 +7,6 @@ import cn.hellohao.service.*;
import cn.hellohao.service.impl.AlbumServiceImpl; import cn.hellohao.service.impl.AlbumServiceImpl;
import cn.hellohao.service.impl.UserServiceImpl; import cn.hellohao.service.impl.UserServiceImpl;
import cn.hellohao.service.impl.deleImages; import cn.hellohao.service.impl.deleImages;
import cn.hellohao.utils.Base64Encryption;
import cn.hellohao.utils.SetFiles; import cn.hellohao.utils.SetFiles;
import cn.hellohao.utils.SetText; import cn.hellohao.utils.SetText;
import cn.hellohao.utils.progress.MyProgress; import cn.hellohao.utils.progress.MyProgress;
@@ -28,10 +27,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/** /**
* @author Hellohao * @author Hellohao
@@ -444,10 +440,11 @@ public class AdminController {
user.setEmail(email); user.setEmail(email);
} }
} }
user.setPassword(Base64Encryption.encryptBASE64(password.getBytes()));
user.setPassword(Base64.getEncoder().encodeToString(password.getBytes()));
user.setUid(u.getUid()); user.setUid(u.getUid());
} else { } else {
user.setPassword(Base64Encryption.encryptBASE64(password.getBytes())); user.setPassword(Base64.getEncoder().encodeToString(password.getBytes()));
user.setUid(u.getUid()); user.setUid(u.getUid());
} }
userService.change(user); userService.change(user);
@@ -47,6 +47,22 @@ public class AdminRootController {
private ImgreviewService imgreviewService; private ImgreviewService imgreviewService;
@Autowired @Autowired
private AppClientService appClientService; private AppClientService appClientService;
@Autowired
private NOSImageupload nOSImageupload;
@Autowired
private OSSImageupload ossImageupload;
@Autowired
private USSImageupload ussImageupload;
@Autowired
private KODOImageupload kodoImageupload;
@Autowired
private COSImageupload cosImageupload;
@Autowired
private FtpServiceImpl ftpService;
@Autowired
private S3Imageupload s3Imageupload;
@Autowired
private WebDAVImageupload webDAVImageupload;
@PostMapping(value = "/getUserList") @PostMapping(value = "/getUserList")
@@ -189,19 +205,21 @@ public class AdminRootController {
Keys key = keysService.selectKeys(keyId); Keys key = keysService.selectKeys(keyId);
Integer ret = 0; Integer ret = 0;
if (key.getStorageType() == 1) { if (key.getStorageType() == 1) {
ret = NOSImageupload.Initialize(key); ret = nOSImageupload.Initialize(key);
} else if (key.getStorageType() == 2) { } else if (key.getStorageType() == 2) {
ret = OSSImageupload.Initialize(key); ret = ossImageupload.Initialize(key);
} else if (key.getStorageType() == 3) { } else if (key.getStorageType() == 3) {
ret = USSImageupload.Initialize(key); ret = ussImageupload.Initialize(key);
} else if (key.getStorageType() == 4) { } else if (key.getStorageType() == 4) {
ret = KODOImageupload.Initialize(key); ret = kodoImageupload.Initialize(key);
} else if (key.getStorageType() == 6) { } else if (key.getStorageType() == 6) {
ret = COSImageupload.Initialize(key); ret = cosImageupload.Initialize(key);
} else if (key.getStorageType() == 7) { } else if (key.getStorageType() == 7) {
ret = FtpServiceImpl.Initialize(key); ret = ftpService.Initialize(key);
} else if (key.getStorageType() == 8) { } else if (key.getStorageType() == 8) {
ret = S3Imageupload.Initialize(key); ret = s3Imageupload.Initialize(key);
}else if (key.getStorageType() == 9) {
ret = webDAVImageupload.Initialize(key);
} }
Long l = imgService.getsourcememory(keyId); Long l = imgService.getsourcememory(keyId);
jsonObject.put("isok", ret); jsonObject.put("isok", ret);
@@ -224,23 +242,6 @@ public class AdminRootController {
@ResponseBody @ResponseBody
public Msg updateStorage(@RequestParam(value = "data", defaultValue = "") String data) { public Msg updateStorage(@RequestParam(value = "data", defaultValue = "") String data) {
JSONObject jsonObj = JSONObject.parseObject(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);
Keys keys = JSON.toJavaObject(jsonObj,Keys.class); Keys keys = JSON.toJavaObject(jsonObj,Keys.class);
Msg msg = keysService.updateKey(keys); Msg msg = keysService.updateKey(keys);
return msg; return msg;
@@ -5,6 +5,7 @@ import cn.hellohao.config.GlobalConstant;
import cn.hellohao.pojo.*; import cn.hellohao.pojo.*;
import cn.hellohao.service.*; import cn.hellohao.service.*;
import cn.hellohao.service.impl.UploadServicel; import cn.hellohao.service.impl.UploadServicel;
import cn.hellohao.service.impl.WebDAVImageupload;
import cn.hellohao.service.impl.deleImages; import cn.hellohao.service.impl.deleImages;
import cn.hellohao.utils.GetIPS; import cn.hellohao.utils.GetIPS;
import cn.hellohao.utils.MyVersion; import cn.hellohao.utils.MyVersion;
@@ -19,6 +20,8 @@ import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -43,8 +46,8 @@ public class IndexController {
@Autowired private deleImages deleimages; @Autowired private deleImages deleimages;
@Autowired private IRedisService iRedisService; @Autowired private IRedisService iRedisService;
@Autowired private AppClientService appClientService; @Autowired private AppClientService appClientService;
@Autowired private WebDAVImageupload webDAVImageupload;
public static String version = "20230925"; public static String version = "20240319";
@RequestMapping(value = "/") @RequestMapping(value = "/")
public String Welcome(Model model, HttpServletRequest httpServletRequest) { public String Welcome(Model model, HttpServletRequest httpServletRequest) {
model.addAttribute("name", "服务端程序(开源版)"); model.addAttribute("name", "服务端程序(开源版)");
@@ -65,6 +68,7 @@ public class IndexController {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
AppClient appClient = appClientService.getAppClientData("app"); AppClient appClient = appClientService.getAppClientData("app");
jsonObject.put("webname", cd.getString("webname")); jsonObject.put("webname", cd.getString("webname"));
jsonObject.put("systype","free");
jsonObject.put("version",version); jsonObject.put("version",version);
jsonObject.put("websubtitle", cd.getString("websubtitle")); jsonObject.put("websubtitle", cd.getString("websubtitle"));
jsonObject.put("keywords", cd.getString("keywords")); jsonObject.put("keywords", cd.getString("keywords"));
@@ -85,7 +89,7 @@ public class IndexController {
msg.setData(jsonObject); msg.setData(jsonObject);
return msg; return msg;
} }
@PostMapping("/uploadChunkFile") @PostMapping(value = {"/uploadChunkFile","/client/uploadChunkFile"})
@ResponseBody @ResponseBody
@CrossOrigin @CrossOrigin
public Msg uploadChunk(HttpServletRequest request,Chunk chunk) { public Msg uploadChunk(HttpServletRequest request,Chunk chunk) {
@@ -108,7 +112,7 @@ public class IndexController {
} }
} }
@PostMapping("/processFile") @PostMapping(value = {"/processFile","/client/processFile"})
@ResponseBody @ResponseBody
@CrossOrigin @CrossOrigin
public Msg processFile(HttpServletRequest request,@RequestParam(value = "data", defaultValue = "") String data){ public Msg processFile(HttpServletRequest request,@RequestParam(value = "data", defaultValue = "") String data){
@@ -190,6 +194,14 @@ public class IndexController {
return retMsg; return retMsg;
} }
//webdav本地托管
@GetMapping("/w/{shortuuid}")
public ResponseEntity<InputStreamResource> getNextcloudImage(HttpServletRequest request, @PathVariable("shortuuid") String shortuuid) {
ResponseEntity<InputStreamResource> webDAV = webDAVImageupload.getWebDAV(shortuuid);
return webDAV;
}
@RequestMapping(value = "/getUploadInfo") @RequestMapping(value = "/getUploadInfo")
@ResponseBody @ResponseBody
public Msg getUploadInfo() { public Msg getUploadInfo() {
@@ -5,7 +5,6 @@ import cn.hellohao.auth.token.JWTUtil;
import cn.hellohao.config.SysName; import cn.hellohao.config.SysName;
import cn.hellohao.pojo.*; import cn.hellohao.pojo.*;
import cn.hellohao.service.*; import cn.hellohao.service.*;
import cn.hellohao.utils.Base64Encryption;
import cn.hellohao.utils.NewSendEmail; import cn.hellohao.utils.NewSendEmail;
import cn.hellohao.utils.Print; import cn.hellohao.utils.Print;
import cn.hellohao.utils.SetText; import cn.hellohao.utils.SetText;
@@ -27,6 +26,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date; import java.util.Date;
import java.util.UUID; import java.util.UUID;
@@ -55,7 +55,7 @@ public class UserController {
JSONObject jsonObj = JSONObject.parseObject(data); JSONObject jsonObj = JSONObject.parseObject(data);
String username = jsonObj.getString("username"); String username = jsonObj.getString("username");
String email = jsonObj.getString("email"); String email = jsonObj.getString("email");
String password = Base64Encryption.encryptBASE64(jsonObj.getString("password").getBytes()); String password = Base64.getEncoder().encodeToString(jsonObj.getString("password").getBytes());
String verifyCodeForRegister = jsonObj.getString("verifyCode"); String verifyCodeForRegister = jsonObj.getString("verifyCode");
Object redis_verifyCodeForRegister = iRedisService.getValue("verifyCodeForRegister_"+httpServletRequest.getHeader("verifyCodeForRegister")); Object redis_verifyCodeForRegister = iRedisService.getValue("verifyCodeForRegister_"+httpServletRequest.getHeader("verifyCodeForRegister"));
if(!SetText.checkEmail(email)){ if(!SetText.checkEmail(email)){
@@ -203,7 +203,7 @@ public class UserController {
Msg msg = new Msg(); Msg msg = new Msg();
JSONObject jsonObj = JSONObject.parseObject(data); JSONObject jsonObj = JSONObject.parseObject(data);
String email = jsonObj.getString("email"); String email = jsonObj.getString("email");
String password = Base64Encryption.encryptBASE64(jsonObj.getString("password").getBytes()); String password = Base64.getEncoder().encodeToString(jsonObj.getString("password").getBytes());
String verifyCode = jsonObj.getString("verifyCode"); String verifyCode = jsonObj.getString("verifyCode");
if(null == email || null == password || null == verifyCode){ if(null == email || null == password || null == verifyCode){
msg.setCode("5000"); msg.setCode("5000");
@@ -385,7 +385,7 @@ public class UserController {
User user = userService.getUsers(u2); User user = userService.getUsers(u2);
user.setIsok(1); user.setIsok(1);
String new_pass = HexUtil.decodeHexStr(cip);//解密密码 String new_pass = HexUtil.decodeHexStr(cip);//解密密码
user.setPassword(Base64Encryption.encryptBASE64(new_pass.getBytes())); user.setPassword(Base64.getEncoder().encodeToString(new_pass.getBytes()));
String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
user.setUid(uid); user.setUid(uid);
if (user != null) { if (user != null) {
@@ -9,13 +9,9 @@ import java.util.List;
@Mapper @Mapper
public interface CodeMapper { public interface CodeMapper {
//查询扩容码
List<Code> selectCode(@Param("code") String code); List<Code> selectCode(@Param("code") String code);
Code selectCodekey(@Param("code") String code); Code selectCodekey(@Param("code") String code);
//Integer selectCodekey(@Param("value") String value);
//添加
Integer addCode(Code code); Integer addCode(Code code);
//删除扩容码
Integer deleteCode(@Param("code") String code); Integer deleteCode(@Param("code") String code);
} }
@@ -22,6 +22,10 @@ public interface ImgMapper {
Images selectByPrimaryKey(@Param("id") Long id); Images selectByPrimaryKey(@Param("id") Long id);
Images selectImgByBrieflink(@Param("brieflink") String brieflink);
Images selectImgByShortlink(@Param("shortlink") String shortlink);
Integer counts(@Param("userid") Integer userid); Integer counts(@Param("userid") Integer userid);
Integer setImg(Images images); Integer setImg(Images images);
@@ -9,11 +9,9 @@ import java.util.List;
@Mapper @Mapper
public interface KeysMapper { public interface KeysMapper {
//查询密钥
Keys selectKeys(@Param("id") Integer id); Keys selectKeys(@Param("id") Integer id);
List<Keys> getStorageName(); List<Keys> getStorageName();
List<Keys> getStorage(); List<Keys> getStorage();
//修改key
Integer updateKey(Keys key); Integer updateKey(Keys key);
List<Keys> getKeys(); List<Keys> getKeys();
@@ -39,6 +39,8 @@ public class Images {
private String idname; private String idname;
private Integer isRepeat;//如果没有开启查重的时候他是0,开启为1 private Integer isRepeat;//如果没有开启查重的时候他是0,开启为1
private String searchname; private String searchname;
private String brieflink;
private String shortlink;
private String order; private String order;
} }
+4
View File
@@ -14,5 +14,9 @@ public class Keys {
private Integer storageType; private Integer storageType;
private String keyname; private String keyname;
private String RootPath;//存入的目录 private String RootPath;//存入的目录
private Boolean SysTransmit;
public Boolean getSysTransmit() {
return SysTransmit==null?false:SysTransmit;
}
} }
-4
View File
@@ -11,16 +11,12 @@ public class Msg implements Serializable {
private static final long serialVersionUID = 5196249482551119279L; private static final long serialVersionUID = 5196249482551119279L;
//返回码
private String code ="200"; private String code ="200";
//提示信息
private String info="操作成功"; private String info="操作成功";
//返回数据
private Object data; private Object data;
//异常
private String exceptions; private String exceptions;
@@ -34,6 +34,8 @@ public class FirstJob {
@Autowired @Autowired
private S3Imageupload s3Imageupload; private S3Imageupload s3Imageupload;
@Autowired @Autowired
private WebDAVImageupload webDAVImageupload;
@Autowired
private FtpServiceImpl ftpService; private FtpServiceImpl ftpService;
@Autowired @Autowired
ImgTempService imgTempService; ImgTempService imgTempService;
@@ -78,6 +80,8 @@ public class FirstJob {
firstJob.ftpService.delFTP(keys.getId(), images); firstJob.ftpService.delFTP(keys.getId(), images);
}else if(keys.getStorageType()==8){ }else if(keys.getStorageType()==8){
firstJob.s3Imageupload.deleS3(keys.getId(), images); firstJob.s3Imageupload.deleS3(keys.getId(), images);
}else if(keys.getStorageType()==9){
firstJob.webDAVImageupload.delWebDAV(keys.getId(), images);
}else{ }else{
System.err.println("未获取到对象存储参数,上传失败。"); System.err.println("未获取到对象存储参数,上传失败。");
} }
@@ -3,6 +3,7 @@ package cn.hellohao.service;
import cn.hellohao.pojo.Images; import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.User; import cn.hellohao.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@@ -21,6 +22,10 @@ public interface ImgService {
Images selectByPrimaryKey(Long id); Images selectByPrimaryKey(Long id);
Images selectImgByBrieflink(String brieflink);
Images selectImgByShortlink(String shortlink);
Integer counts(Integer userid); Integer counts(Integer userid);
Integer setImg(Images images); Integer setImg(Images images);
@@ -15,13 +15,17 @@ import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult; import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region; import com.qcloud.cos.region.Region;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.util.Map; import java.util.Map;
@Service @Service
public class COSImageupload { public class COSImageupload {
private static Logger logger = LoggerFactory.getLogger(COSImageupload.class);
static COSClient cosClient; static COSClient cosClient;
static Keys key; static Keys key;
@@ -29,16 +33,18 @@ public class COSImageupload {
Map<Map<String, String>, File> fileMap, String username, Integer keyID) { Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage(); ReturnImage returnImage = new ReturnImage();
File file = null; File file = null;
FileInputStream stream = null;
try { try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) { for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix"); String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name"); String ShortUIDName = entry.getKey().get("name");
file = entry.getValue(); file = entry.getValue();
stream = new FileInputStream(file);
try { try {
String bucketName = key.getBucketname(); String bucketName = key.getBucketname();
String userkey = username + "/" + ShortUIDName + "." + prefix; String userkey = username + "/" + ShortUIDName + "." + prefix;
PutObjectRequest putObjectRequest = PutObjectRequest putObjectRequest =
new PutObjectRequest(bucketName, userkey, file); new PutObjectRequest(bucketName, userkey, stream,null);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
} catch (CosServiceException serverException) { } catch (CosServiceException serverException) {
returnImage.setCode("400"); returnImage.setCode("400");
@@ -47,10 +53,12 @@ public class COSImageupload {
returnImage.setCode("400"); returnImage.setCode("400");
clientException.printStackTrace(); clientException.printStackTrace();
} }
try {if(stream!=null){stream.close();}} catch (Exception ex) { }
} }
returnImage.setCode("200"); returnImage.setCode("200");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); try {if(stream!=null){stream.close();}} catch (Exception ex) { }
logger.error("COS协议上传时发生异常:",e);
returnImage.setCode("500"); returnImage.setCode("500");
} }
return returnImage; return returnImage;
@@ -11,6 +11,8 @@ import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -28,10 +30,8 @@ import java.util.*;
@Service @Service
public class ClientService { public class ClientService {
private static Logger logger = LoggerFactory.getLogger(ClientService.class); private static Logger logger = LoggerFactory.getLogger(ClientService.class);
@Autowired @Autowired private ConfdataService confdataService;
ConfdataService confdataService; @Autowired private SysConfigService sysConfigService;
@Autowired
SysConfigService sysConfigService;
@Autowired private UserMapper userMapper; @Autowired private UserMapper userMapper;
@Autowired private KeysMapper keysMapper; @Autowired private KeysMapper keysMapper;
@Autowired private UploadConfigMapper uploadConfigMapper; @Autowired private UploadConfigMapper uploadConfigMapper;
@@ -60,31 +60,70 @@ public class ClientService {
} }
imageFileName = multipartFile.getOriginalFilename(); imageFileName = multipartFile.getOriginalFilename();
File file = SetFiles.changeFile_new(multipartFile); File file = SetFiles.changeFile_new(multipartFile);
FileInputStream stream = new FileInputStream(file);
User u2 = new User(); User u2 = new User();
if (!file.exists() || email == null || pass == null) { if (!file.exists() || email == null || pass == null) {
msg.setCode("4005"); msg.setCode("4005");
msg.setInfo("必要参数不能为空"); msg.setInfo("必要参数不能为空");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg; return msg;
} }
if (uploadConfig.getBlacklist() != null) {
String[] iparr = uploadConfig.getBlacklist().split(";");
for (String s : iparr) {
if (s.equals(userip)) {
msg.setCode("4010");
msg.setInfo("你暂时不能上传");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg;
}
}
}
u2.setEmail(email); u2.setEmail(email);
u2.setPassword(Base64Encryption.encryptBASE64(pass.getBytes())); u2.setPassword(Base64.getEncoder().encodeToString(pass.getBytes()));
User u = userMapper.getUsers(u2); User u = userMapper.getUsers(u2);
if (null == u || u.getIsok() != 1) { if (null == u || u.getIsok() != 1) {
msg.setCode("4006"); msg.setCode("4006");
msg.setInfo("用户信息不正确,账号异常"); msg.setInfo("用户信息不正确,账号异常");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg; return msg;
} }
String imguid = UUID.randomUUID().toString().replace("-", ""); String imguid = UUID.randomUUID().toString().replace("-", "");
Msg msg1 = updateImgCheck(u, uploadConfig); Msg msg1 = updateImgCheck(u, uploadConfig);
if (!msg1.getCode().equals("300")) { if (!msg1.getCode().equals("300")) {
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg1; return msg1;
} }
JSONObject updateJson = JSONObject.parseObject(msg1.getData().toString());
final JSONObject groupJson = updateJson.getJSONObject("group");
final Group group = groupJson.toJavaObject(Group.class);
Long memory = updateJson.getLong("memory");
Long UsedTotleMemory = updateJson.getLong("UsedTotleMemory");
Long TotleMemory = updateJson.getLong("TotleMemory");
String updatePath = updateJson.getString("updatePath");
sourceKeyId = group.getKeyid(); sourceKeyId = group.getKeyid();
Keys key = keysMapper.selectKeys(sourceKeyId); Keys key = keysMapper.selectKeys(sourceKeyId);
Long tmp = (memory == -1 ? -2 : UsedTotleMemory); Long tmp = (memory == -1 ? -2 : UsedTotleMemory);
if (tmp >= memory) { if (tmp >= memory) {
msg.setCode("4007"); msg.setCode("4007");
msg.setInfo(u == null ? "游客空间已用尽" : "您的可用空间不足"); msg.setInfo(u == null ? "游客空间已用尽" : "您的可用空间不足");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg; return msg;
} }
if (file.length() > TotleMemory) { if (file.length() > TotleMemory) {
@@ -92,63 +131,67 @@ public class ClientService {
System.err.println("最大限制:" + TotleMemory); System.err.println("最大限制:" + TotleMemory);
msg.setCode("4008"); msg.setCode("4008");
msg.setInfo("图像超出系统限制大小"); msg.setInfo("图像超出系统限制大小");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg; return msg;
} }
FileInputStream fis = null; md5key = DigestUtils.md5Hex(stream);
try { // FileInputStream fis = null;
fis = new FileInputStream(file); // try {
md5key = DigestUtils.md5Hex(fis); // fis = new FileInputStream(file);
} catch (Exception e) { // md5key = DigestUtils.md5Hex(fis);
e.printStackTrace(); // } catch (Exception e) {
System.out.println("未获取到图片的MD5,成成UUID"); // logger.error("未获取到图片的MD5,成成UUID异常:",e);
}finally{ // }finally{
try { // try {
if (null != fis) // if (null != fis)
fis.close(); // fis.close();
} catch (Exception e) { // } catch (Exception e) {
e.printStackTrace(); // logger.error("ClientService-110异常",e);
} // }
} // }
Msg fileMiME = TypeDict.FileMiME(file); Msg fileMiME = TypeDict.FileMiME(stream);
if (!fileMiME.getCode().equals("200")) { if (!fileMiME.getCode().equals("200")) {
msg.setCode("4009"); msg.setCode("4009");
msg.setInfo(fileMiME.getInfo()); msg.setInfo(fileMiME.getInfo());
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg; return msg;
} }
if (md5key == null || md5key.equals("")) { if (md5key == null || md5key.equals("")) {
md5key = UUID.randomUUID().toString().replace("-", ""); md5key = UUID.randomUUID().toString().replace("-", "");
} }
String prefix = file.getName().substring(file.getName().lastIndexOf(".") + 1); String prefix = file.getName().substring(file.getName().lastIndexOf(".") + 1);
if (uploadConfig.getBlacklist() != null) { try {if(stream!=null){stream.close();}} catch (Exception ex) { }
String[] iparr = uploadConfig.getBlacklist().split(";");
for (String s : iparr) {
if (s.equals(userip)) {
msg.setCode("4010");
msg.setInfo("你暂时不能上传");
return msg;
}
}
}
Images imgObj = new Images(); Images imgObj = new Images();
String imgnameEd = null; String imgnameEd = null;
Map<Map<String, String>, File> map = new HashMap<>(); Map<Map<String, String>, File> map = new HashMap<>();
String shortUuid_y = SetText.getShortUuid();
String shortUuid_s = SetText.getShortUuid();
if (file.exists()) { if (file.exists()) {
Map<String, String> m1 = new HashMap<>(); Map<String, String> m1 = new HashMap<>();
String shortUuid_y = SetText.getShortUuid();
m1.put("prefix", prefix); m1.put("prefix", prefix);
m1.put("name", shortUuid_y); m1.put("name", shortUuid_y);
map.put(m1, file); map.put(m1, file);
imgnameEd = updatePath + "/" + shortUuid_y + "." + prefix; imgnameEd = updatePath + "/" + shortUuid_y + "." + prefix;
imgObj.setImgname(imgnameEd); imgObj.setImgname(imgnameEd);
if (key.getStorageType().equals(5)) { if (key.getStorageType().equals(5)) {
imgObj.setImgurl(key.getRequestAddress() + "/ota/" + imgnameEd); imgObj.setImgurl(confdata.getString("domain") + "/ota/" + imgnameEd);
} else { } else if(key.getStorageType().equals(9) && key.getSysTransmit()){
imgObj.setImgurl(confdata.getString("domain") + "/w/" + shortUuid_y);
}else {
imgObj.setImgurl(key.getRequestAddress() + "/" + imgnameEd); imgObj.setImgurl(key.getRequestAddress() + "/" + imgnameEd);
} }
imgObj.setSizes(Long.toString(file.length())); imgObj.setSizes(Long.toString(file.length()));
}else{ }else{
msg.setInfo("未获取到指定图像:110503"); msg.setInfo("未获取到指定图像:110503");
msg.setCode("110503"); msg.setCode("110503");
file.delete();
return msg; return msg;
} }
imgObj.setUpdatetime(df.format(new Date())); imgObj.setUpdatetime(df.format(new Date()));
@@ -167,9 +210,12 @@ public class ClientService {
imgObj.setMd5key(md5key); imgObj.setMd5key(md5key);
imgObj.setImguid(imguid); imgObj.setImguid(imguid);
imgObj.setFormat(fileMiME.getData().toString()); imgObj.setFormat(fileMiME.getData().toString());
imgObj.setShortlink(shortUuid_y);
imgObj.setBrieflink(shortUuid_s);
imgObj.setIdname(imageFileName); imgObj.setIdname(imageFileName);
Msg insertRet = imgServiceImpl.insertImgDataForCheck(imgObj,u,confdata,file.getName()); Msg insertRet = imgServiceImpl.insertImgDataForCheck(imgObj,u,confdata,file.getName());
if (insertRet.getCode().equals("000")) { if (insertRet.getCode().equals("000")) {
file.delete();
return insertRet; return insertRet;
} }
long stime = System.currentTimeMillis(); long stime = System.currentTimeMillis();
@@ -185,43 +231,48 @@ public class ClientService {
imgServiceImpl.deleimgForImgUid(imgObj.getImguid()); imgServiceImpl.deleimgForImgUid(imgObj.getImguid());
msg.setCode("5001"); msg.setCode("5001");
msg.setInfo("上传服务内部错误"); msg.setInfo("上传服务内部错误");
file.delete();
return msg; return msg;
} }
file.delete(); file.delete();
msg.setData(jsonObject); msg.setData(jsonObject);
return msg; return msg;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
msg.setCode("5001"); msg.setCode("5001");
msg.setInfo("Error for server:500"); msg.setInfo("Error for server:500");
logger.error("ClientServiceError for server-202行异常",e);
return msg; return msg;
} }
} }
public static Group group; // public static Group group;
public static Long memory; // public static Long memory;
public static Long TotleMemory; // public static Long TotleMemory;
public static Long UsedTotleMemory; // public static Long UsedTotleMemory;
public static String updatePath = "tourist"; // public static String updatePath = "tourist";
private Msg updateImgCheck(User user, UploadConfig uploadConfig) { private Msg updateImgCheck(User user, UploadConfig uploadConfig) {
Msg msg = new Msg(); Msg msg = new Msg();
java.text.DateFormat dateFormat = null; JSONObject jsonObject = new JSONObject();
String updatePath = "tourist";
try { try {
dateFormat = new SimpleDateFormat("yyyy/MM/dd"); Group group = GetCurrentSource.GetSource(user == null ? null : user.getId());
jsonObject.put("group",group);
if (user == null) { if (user == null) {
if (uploadConfig.getIsupdate() != 1) { if (uploadConfig.getIsupdate() != 1) {
msg.setCode("1000"); msg.setCode("1000");
msg.setInfo("系统已禁用游客上传"); msg.setInfo("系统已禁用游客上传");
return msg; return msg;
} }
group = GetCurrentSource.GetSource(null); Long memory = Long.valueOf(uploadConfig.getVisitormemory()); // 单位 B 游客设置总量
memory = Long.valueOf(uploadConfig.getVisitormemory()); // 单位 B 游客设置总量 Long TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists()); // 单位 B 游客单文件大小
TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists()); // 单位 B 游客单文件大小 Long UsedTotleMemory =
UsedTotleMemory =
imgServiceImpl.getusermemory(0) == null imgServiceImpl.getusermemory(0) == null
? 0L ? 0L
: imgServiceImpl.getusermemory(0); // 单位 B : imgServiceImpl.getusermemory(0); // 单位 B
jsonObject.put("memory",memory);
jsonObject.put("TotleMemory",TotleMemory);
jsonObject.put("UsedTotleMemory",UsedTotleMemory);
} else { } else {
// 判断用户能不能上传 // 判断用户能不能上传
if (uploadConfig.getUserclose() != 1) { if (uploadConfig.getUserclose() != 1) {
@@ -230,21 +281,24 @@ public class ClientService {
return msg; return msg;
} }
updatePath = user.getUsername(); updatePath = user.getUsername();
group = GetCurrentSource.GetSource(user.getId()); Long memory = Long.valueOf(user.getMemory()); // 单位 B
memory = Long.valueOf(user.getMemory()); // 单位 B Long TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser()); // 单位 B
TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser()); // 单位 B Long UsedTotleMemory =
UsedTotleMemory =
imgServiceImpl.getusermemory(user.getId()) == null imgServiceImpl.getusermemory(user.getId()) == null
? 0L ? 0L
: imgServiceImpl.getusermemory(user.getId()); // 单位 B : imgServiceImpl.getusermemory(user.getId()); // 单位 B
jsonObject.put("memory",memory);
jsonObject.put("TotleMemory",TotleMemory);
jsonObject.put("UsedTotleMemory",UsedTotleMemory);
} }
// 判断上传的图片目录结构类型 // 判断上传的图片目录结构类型
if (uploadConfig.getUrltype() == 2) { if (uploadConfig.getUrltype() == 2) {
updatePath = dateFormat.format(new Date()); jsonObject.put("updatePath",updatePath);
msg.setData(jsonObject);
} }
msg.setCode("300"); msg.setCode("300");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); logger.error("ClientService-异常",e);
msg.setCode("500"); msg.setCode("500");
} }
return msg; return msg;
@@ -7,15 +7,19 @@ import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ftp.FtpMode; import cn.hutool.extra.ftp.FtpMode;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
@Service @Service
public class FtpServiceImpl { public class FtpServiceImpl {
private static Logger logger = LoggerFactory.getLogger(FtpServiceImpl.class);
private Keys key; private Keys key;
public static int Initialize(Keys k) { public static int Initialize(Keys k) {
@@ -66,22 +70,26 @@ public class FtpServiceImpl {
return returnImage; return returnImage;
} }
File file = null; File file = null;
FileInputStream stream = null;
try { try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) { for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix"); String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name"); String ShortUIDName = entry.getKey().get("name");
file = entry.getValue(); file = entry.getValue();
stream = new FileInputStream(file);
boolean isUpload = ftp.upload( boolean isUpload = ftp.upload(
"/" + username, "/" + username,
ShortUIDName + "." + prefix, ShortUIDName + "." + prefix,
file); stream);
if (!isUpload) { if (!isUpload) {
returnImage.setCode("400"); returnImage.setCode("400");
} }
try {if(stream!=null){stream.close();}} catch (Exception e) { }
} }
returnImage.setCode("200"); returnImage.setCode("200");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); try {if(stream!=null){stream.close();}} catch (Exception ex) { }
logger.error("FTP发生异常:",e);
returnImage.setCode("500"); returnImage.setCode("500");
} }
return returnImage; return returnImage;
@@ -46,6 +46,16 @@ public class ImgServiceImpl implements ImgService {
return imgMapper.selectByPrimaryKey(id); return imgMapper.selectByPrimaryKey(id);
} }
@Override
public Images selectImgByBrieflink(String brieflink) {
return imgMapper.selectImgByBrieflink(brieflink);
}
@Override
public Images selectImgByShortlink(String shortlink) {
return imgMapper.selectImgByShortlink(shortlink);
}
@Override @Override
public Integer counts(Integer userid) { public Integer counts(Integer userid) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
@@ -131,10 +141,9 @@ public class ImgServiceImpl implements ImgService {
if(sysConfig.getCheckduplicate().equals("1")){ if(sysConfig.getCheckduplicate().equals("1")){
//查重 //查重
Images img = new Images(); Images img = new Images();
img.setUserid(user.getId()); img.setUserid(user==null?0:user.getId());
img.setMd5key(images.getMd5key()); img.setMd5key(images.getMd5key());
List<Images> list = imgMapper.selectImgUrlByMD5(img); List<Images> list = imgMapper.selectImgUrlByMD5(img);
jsonObject.put("url", list.get(0).getImgurl());
if (list.size() > 0) { if (list.size() > 0) {
jsonObject.put("url", list.get(0).getImgurl()); jsonObject.put("url", list.get(0).getImgurl());
jsonObject.put("name", flilename); jsonObject.put("name", flilename);
@@ -58,6 +58,8 @@ public class InitializationStorage implements CommandLineRunner {
FtpServiceImpl.Initialize(key); FtpServiceImpl.Initialize(key);
}else if(key.getStorageType()==8){ }else if(key.getStorageType()==8){
S3Imageupload.Initialize(key); S3Imageupload.Initialize(key);
}else if(key.getStorageType()==9){
WebDAVImageupload.Initialize(key);
} }
} }
} }
@@ -14,13 +14,17 @@ import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.storage.model.FileInfo; import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth; import com.qiniu.util.Auth;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.util.Map; import java.util.Map;
@Service @Service
public class KODOImageupload { public class KODOImageupload {
private static Logger logger = LoggerFactory.getLogger(KODOImageupload.class);
static String upToken; static String upToken;
static BucketManager bucketManager; static BucketManager bucketManager;
static Keys key; static Keys key;
@@ -33,15 +37,15 @@ public class KODOImageupload {
Auth auth = Auth.create(key.getAccessKey(), key.getAccessSecret()); 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; File file = null;
FileInputStream stream = null;
try { try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) { for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix"); String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name"); String ShortUIDName = entry.getKey().get("name");
file = entry.getValue(); file = entry.getValue();
stream = new FileInputStream(file);
try { try {
Response response = Response response = uploadManager.put(stream,username + "/" + ShortUIDName + "." + prefix, upToken, null, null);
uploadManager.put(
file, username + "/" + ShortUIDName + "." + prefix, upToken);
DefaultPutRet putRet = DefaultPutRet putRet =
new Gson().fromJson(response.bodyString(), DefaultPutRet.class); new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
@@ -54,10 +58,12 @@ public class KODOImageupload {
} catch (QiniuException ex2) { } catch (QiniuException ex2) {
} }
} }
try {if(stream!=null){stream.close();}} catch (Exception ex) { }
} }
returnImage.setCode("200"); returnImage.setCode("200");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); try {if(stream!=null){stream.close();}} catch (Exception ex) { }
logger.error("KODO发生异常:",e);
returnImage.setCode("500"); returnImage.setCode("500");
} }
return returnImage; return returnImage;
@@ -2,6 +2,7 @@ package cn.hellohao.service.impl;
import cn.hellohao.pojo.Msg; import cn.hellohao.pojo.Msg;
import cn.hellohao.utils.Print; import cn.hellohao.utils.Print;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -30,6 +31,8 @@ public class KeysServiceImpl implements KeysService {
private FtpServiceImpl ftpService; private FtpServiceImpl ftpService;
@Autowired @Autowired
private S3Imageupload s3Imageupload; private S3Imageupload s3Imageupload;
@Autowired
private WebDAVImageupload webDAVImageupload;
@Override @Override
@@ -51,6 +54,29 @@ public class KeysServiceImpl implements KeysService {
public Msg updateKey(Keys key) { public Msg updateKey(Keys key) {
Msg msg = new Msg(); Msg msg = new Msg();
Integer ret = -2; Integer ret = -2;
//修正一边数据格式,去除末尾的斜杠
if(key.getStorageType()==9 || key.getStorageType()==8){
//s3或者webdav
if(!StringUtils.isBlank(key.getRootPath()) && !key.getRootPath().equals("/")){
if (key.getRootPath().endsWith("/")) {
String rootpath = key.getRootPath();
key.setRootPath(rootpath.substring(0, rootpath.length() - 1));
}
}
}
if(!StringUtils.isBlank(key.getEndpoint())){
final String endpoint = key.getEndpoint();
if (endpoint.endsWith("/")) {
key.setEndpoint(endpoint.substring(0, endpoint.length() - 1));
}
}
if(!StringUtils.isBlank(key.getRequestAddress())){
final String requestAddress = key.getRequestAddress();
if (requestAddress.endsWith("/")) {
key.setRequestAddress(requestAddress.substring(0, requestAddress.length() - 1));
}
}
if(key.getStorageType()==1){ if(key.getStorageType()==1){
ret =nOSImageupload.Initialize(key); ret =nOSImageupload.Initialize(key);
}else if (key.getStorageType()==2){ }else if (key.getStorageType()==2){
@@ -67,6 +93,8 @@ public class KeysServiceImpl implements KeysService {
ret = ftpService.Initialize(key); ret = ftpService.Initialize(key);
}else if(key.getStorageType()==8){ }else if(key.getStorageType()==8){
ret = s3Imageupload.Initialize(key); ret = s3Imageupload.Initialize(key);
}else if(key.getStorageType()==9){
ret = webDAVImageupload.Initialize(key);
}else{ }else{
Print.Normal("为获取到存储参数,或者使用存储源是本地的。"); Print.Normal("为获取到存储参数,或者使用存储源是本地的。");
} }
@@ -9,6 +9,8 @@ import com.netease.cloud.auth.Credentials;
import com.netease.cloud.services.nos.NosClient; import com.netease.cloud.services.nos.NosClient;
import com.netease.cloud.services.nos.model.ObjectListing; import com.netease.cloud.services.nos.model.ObjectListing;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
@@ -11,13 +11,17 @@ import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectRequest;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.util.Map; import java.util.Map;
@Service @Service
public class OSSImageupload { public class OSSImageupload {
private static Logger logger = LoggerFactory.getLogger(OSSImageupload.class);
static OSS ossClient; static OSS ossClient;
static Keys key; static Keys key;
@@ -25,6 +29,7 @@ public class OSSImageupload {
Map<Map<String, String>, File> fileMap, String username, Integer keyID) { Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage(); ReturnImage returnImage = new ReturnImage();
File file = null; File file = null;
FileInputStream stream = null;
ObjectMetadata meta = new ObjectMetadata(); ObjectMetadata meta = new ObjectMetadata();
meta.setHeader("Content-Disposition", "inline"); meta.setHeader("Content-Disposition", "inline");
try { try {
@@ -32,19 +37,22 @@ public class OSSImageupload {
String prefix = entry.getKey().get("prefix"); String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name"); String ShortUIDName = entry.getKey().get("name");
file = entry.getValue(); file = entry.getValue();
Msg fileMiME = TypeDict.FileMiME(file); stream = new FileInputStream(file);
Msg fileMiME = TypeDict.FileMiME(stream);
meta.setHeader("content-type", fileMiME.getData().toString()); meta.setHeader("content-type", fileMiME.getData().toString());
PutObjectRequest putObjectRequest = PutObjectRequest putObjectRequest =
new PutObjectRequest( new PutObjectRequest(
key.getBucketname(), key.getBucketname(),
username + "/" + ShortUIDName + "." + prefix, username + "/" + ShortUIDName + "." + prefix,
file, stream,
meta); meta);
ossClient.putObject(putObjectRequest); ossClient.putObject(putObjectRequest);
try {if(stream!=null){stream.close();}} catch (Exception e) { }
} }
returnImage.setCode("200"); returnImage.setCode("200");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); try {if(stream!=null){stream.close();}} catch (Exception ex) { }
logger.error("OSS上传发生异常:",e);
returnImage.setCode("500"); returnImage.setCode("500");
} }
return returnImage; return returnImage;
@@ -12,16 +12,14 @@ import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket; import com.amazonaws.services.s3.model.*;
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.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -51,21 +49,28 @@ public class S3Imageupload {
return returnImage; return returnImage;
} }
File file = null; File file = null;
FileInputStream stream = null;
try { try {
for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) { for (Map.Entry<Map<String, String>, File> entry : fileMap.entrySet()) {
String prefix = entry.getKey().get("prefix"); String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name"); String ShortUIDName = entry.getKey().get("name");
file = entry.getValue(); file = entry.getValue();
stream = new FileInputStream(file);
//解决存储源不能浏览图片的问题
// ObjectMetadata objectMetadata = new ObjectMetadata();
// objectMetadata.addUserMetadata();
AS3.putObject( AS3.putObject(
new PutObjectRequest( new PutObjectRequest(
KEY.getBucketname(), KEY.getBucketname(),
username + "/" + ShortUIDName + "." + prefix, username + "/" + ShortUIDName + "." + prefix,
file)); stream,null));
// S3Object object = s3.getObject( new GetObjectRequest( key.getBucketname(), // S3Object object = s3.getObject( new GetObjectRequest( key.getBucketname(),
try {if(stream!=null){stream.close();}} catch (Exception e) { }
} }
returnImage.setCode("200"); returnImage.setCode("200");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); try {if(stream!=null){stream.close();}} catch (Exception ex) { }
logger.error("S3协议上传发生异常:",e);
returnImage.setCode("500"); returnImage.setCode("500");
} }
return returnImage; return returnImage;
@@ -1,102 +0,0 @@
package cn.hellohao.service.impl;
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.springframework.stereotype.Service;
import java.io.File;
import java.util.List;
import java.util.Map;
@Service
public class UFileImageupload1 {
static UpYun uFile;
static Keys key;
/*
* 废弃方法待补位
* */
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<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) {
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");
System.err.println("上传失败");
}
}
} 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("")) {
UpYun ufObj = new UpYun(k.getBucketname(), k.getAccessKey(), k.getAccessSecret());
List<UpYun.FolderItem> items = null;
try {
items = ufObj.readDir("/", null);
ret = 1;
uFile = ufObj;
key = k;
} catch (Exception e) {
System.out.println("UFile Object Is null");
ret = -1;
}
}
}
return ret;
}
public Boolean delUFile(Integer keyID, Images images) {
boolean b = true;
try {
boolean result = uFile.deleteFile(images.getImgname(), null);
} catch (Exception e) {
e.printStackTrace();
b = false;
}
return b;
}
}
@@ -8,14 +8,18 @@ import cn.hellohao.utils.TypeDict;
import com.UpYun; import com.UpYun;
import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.ObjectMetadata;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
public class USSImageupload { public class USSImageupload {
private static Logger logger = LoggerFactory.getLogger(USSImageupload.class);
static UpYun upyun; static UpYun upyun;
static Keys key; static Keys key;
@@ -23,6 +27,7 @@ public class USSImageupload {
Map<Map<String, String>, File> fileMap, String username, Integer keyID) { Map<Map<String, String>, File> fileMap, String username, Integer keyID) {
ReturnImage returnImage = new ReturnImage(); ReturnImage returnImage = new ReturnImage();
File file = null; File file = null;
FileInputStream stream = null;
ObjectMetadata meta = new ObjectMetadata(); ObjectMetadata meta = new ObjectMetadata();
meta.setHeader("Content-Disposition", "inline"); meta.setHeader("Content-Disposition", "inline");
try { try {
@@ -30,21 +35,24 @@ public class USSImageupload {
String prefix = entry.getKey().get("prefix"); String prefix = entry.getKey().get("prefix");
String ShortUIDName = entry.getKey().get("name"); String ShortUIDName = entry.getKey().get("name");
file = entry.getValue(); file = entry.getValue();
Msg fileMiME = TypeDict.FileMiME(file); stream = new FileInputStream(file);
Msg fileMiME = TypeDict.FileMiME(stream);
meta.setHeader("content-type", fileMiME.getData().toString()); meta.setHeader("content-type", fileMiME.getData().toString());
upyun.setContentMD5(UpYun.md5(file)); upyun.setContentMD5(UpYun.md5(file));
boolean result = boolean result =
upyun.writeFile(username + "/" + ShortUIDName + "." + prefix, file, true); upyun.writeFile(username + "/" + ShortUIDName + "." + prefix, stream, true, null);
if (result) { if (result) {
} else { } else {
System.err.println("上传失败"); System.err.println("上传失败");
returnImage.setCode("400"); returnImage.setCode("400");
} }
try {if(stream!=null){stream.close();}} catch (Exception e) { }
} }
returnImage.setCode("200"); returnImage.setCode("200");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); try {if(stream!=null){stream.close();}} catch (Exception ex) { }
logger.error("OSS上传发生异常:",e);
returnImage.setCode("500"); returnImage.setCode("500");
} }
return returnImage; return returnImage;
@@ -18,12 +18,17 @@ import org.apache.shiro.subject.Subject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@@ -77,47 +82,23 @@ public class UploadServicel {
return imgData; return imgData;
} }
} }
FileInputStream stream = new FileInputStream(file);
String imguid = UUID.randomUUID().toString().replace("-", ""); String imguid = UUID.randomUUID().toString().replace("-", "");
Msg msg1 = updateImgCheck(u, uploadConfig); Msg msg1 = updateImgCheck(u, uploadConfig);
if (!msg1.getCode().equals("300")) { if (!msg1.getCode().equals("300")) {
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg1; return msg1;
} }
sourceKeyId = group.getKeyid(); JSONObject updateJson = JSONObject.parseObject(msg1.getData().toString());
Keys key = keysMapper.selectKeys(sourceKeyId); final JSONObject groupJson = updateJson.getJSONObject("group");
Long tmp = (memory == -1 ? -2 : UsedTotleMemory); final Group group = groupJson.toJavaObject(Group.class);
if (tmp >= memory) { Long memory = updateJson.getLong("memory");
msg.setCode("4005"); Long UsedTotleMemory = updateJson.getLong("UsedTotleMemory");
msg.setInfo(u == null ? "游客空间已用尽" : "您的可用空间不足"); Long TotleMemory = updateJson.getLong("TotleMemory");
return msg; String updatePath = updateJson.getString("updatePath");
}
if (file.length() > TotleMemory) {
msg.setCode("4006");
msg.setInfo("图像超出系统限制大小");
return msg;
}
Msg fileMiME = TypeDict.FileMiME(file);
if (!fileMiME.getCode().equals("200")) {
msg.setCode("4000");
msg.setInfo(fileMiME.getInfo());
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);
if (uploadConfig.getBlacklist() != null) { if (uploadConfig.getBlacklist() != null) {
String[] iparr = uploadConfig.getBlacklist().split(";"); String[] iparr = uploadConfig.getBlacklist().split(";");
for (String s : iparr) { for (String s : iparr) {
@@ -125,31 +106,96 @@ public class UploadServicel {
file.delete(); file.delete();
msg.setCode("4003"); msg.setCode("4003");
msg.setInfo("你暂时不能上传"); msg.setInfo("你暂时不能上传");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg; return msg;
} }
} }
} }
sourceKeyId = group.getKeyid();
Keys key = keysMapper.selectKeys(sourceKeyId);
Long tmp = (memory == -1 ? -2 : UsedTotleMemory);
if (tmp >= memory) {
msg.setCode("4005");
msg.setInfo(u == null ? "游客空间已用尽" : "您的可用空间不足");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg;
}
if (file.length() > TotleMemory) {
msg.setCode("4006");
msg.setInfo("图像超出系统限制大小");
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg;
}
Msg fileMiME = TypeDict.FileMiME(stream);
if (!fileMiME.getCode().equals("200")) {
msg.setCode("4000");
msg.setInfo(fileMiME.getInfo());
try {
if(stream!=null){stream.close();}
file.delete();
} catch (Exception e) { }
return msg;
}
if (md5key == null || md5key.equals("")) {
md5key = DigestUtils.md5Hex(stream);
// 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);
try {
if(stream!=null){stream.close();}
} catch (Exception e) { }
// 判断路径格式 处理一下,去掉最前面的/
String RootPath = key.getRootPath().replace(" ", "");
if (!RootPath.equals("/")) {
updatePath = RootPath.substring(1) + "/" + updatePath;
}
// 先存数据库 // 先存数据库
Images imgObj = new Images(); Images imgObj = new Images();
String imgnameEd = null; String imgnameEd = null;
Map<Map<String, String>, File> map = new HashMap<>(); Map<Map<String, String>, File> map = new HashMap<>();
String shortUuid_y = SetText.getShortUuid();
String shortUuid_s = SetText.getShortUuid();
if (file.exists()) { if (file.exists()) {
Map<String, String> m1 = new HashMap<>(); Map<String, String> m1 = new HashMap<>();
String shortUuid_y = SetText.getShortUuid();
m1.put("prefix", prefix); m1.put("prefix", prefix);
m1.put("name", shortUuid_y); m1.put("name", shortUuid_y);
map.put(m1, file); map.put(m1, file);
imgnameEd = updatePath + "/" + shortUuid_y + "." + prefix; imgnameEd = updatePath + "/" + shortUuid_y + "." + prefix;
imgObj.setImgname(imgnameEd); imgObj.setImgname(imgnameEd);
if (key.getStorageType().equals(5)) { if (key.getStorageType().equals(5)) {
imgObj.setImgurl(key.getRequestAddress() + "/ota/" + imgnameEd); imgObj.setImgurl(confdata.getString("domain") + "/ota/" + imgnameEd);
} else { } else if(key.getStorageType().equals(9) && key.getSysTransmit()){
imgObj.setImgurl(confdata.getString("domain") + "/w/" + shortUuid_y);
}else {
imgObj.setImgurl(key.getRequestAddress() + "/" + imgnameEd); imgObj.setImgurl(key.getRequestAddress() + "/" + imgnameEd);
} }
imgObj.setSizes(Long.toString(file.length())); imgObj.setSizes(Long.toString(file.length()));
}else{ }else{
msg.setInfo("未获取到指定图像:110503"); msg.setInfo("未获取到指定图像:110503");
msg.setCode("110503"); msg.setCode("110503");
try { file.delete(); } catch (Exception e) { }
return msg; return msg;
} }
imgObj.setUpdatetime(df.format(new Date())); imgObj.setUpdatetime(df.format(new Date()));
@@ -168,14 +214,18 @@ public class UploadServicel {
imgObj.setMd5key(md5key); imgObj.setMd5key(md5key);
imgObj.setImguid(imguid); imgObj.setImguid(imguid);
imgObj.setFormat(fileMiME.getData().toString()); imgObj.setFormat(fileMiME.getData().toString());
imgObj.setShortlink(shortUuid_y);
imgObj.setBrieflink(shortUuid_s);
imgObj.setIdname(imgName); imgObj.setIdname(imgName);
// Integer insertRet = imgMapper.insertImgData(imgObj); // Integer insertRet = imgMapper.insertImgData(imgObj);
Msg insertRet = imgServiceImpl.insertImgDataForCheck(imgObj,u,confdata,file.getName()); Msg insertRet = imgServiceImpl.insertImgDataForCheck(imgObj,u,confdata,file.getName());
if (insertRet.getCode().equals("000")) { if (insertRet.getCode().equals("000")) {
try { file.delete(); } catch (Exception e) { }
return insertRet; return insertRet;
} }
long stime = System.currentTimeMillis(); long stime = System.currentTimeMillis();
System.out.println("上传前地址:"+updatePath);
ReturnImage returnImage = getSource.storageSource(key.getStorageType(), map, updatePath, key.getId()); ReturnImage returnImage = getSource.storageSource(key.getStorageType(), map, updatePath, key.getId());
if (returnImage.getCode().equals("200")) { if (returnImage.getCode().equals("200")) {
long etime = System.currentTimeMillis(); long etime = System.currentTimeMillis();
@@ -184,24 +234,21 @@ public class UploadServicel {
jsonObject.put("name", imgObj.getImgname()); jsonObject.put("name", imgObj.getImgname());
jsonObject.put("imguid", imgObj.getImguid()); jsonObject.put("imguid", imgObj.getImguid());
imgViolationJudgeService.LegalImageCheck(imgObj,key); imgViolationJudgeService.LegalImageCheck(imgObj,key);
// new Thread(
// () -> {
// LegalImageCheck(imgObj);
// })
// .start();
} else { } else {
imgServiceImpl.deleimgForImgUid(imgObj.getImguid()); imgServiceImpl.deleimgForImgUid(imgObj.getImguid());
msg.setCode("5001"); msg.setCode("5001");
msg.setInfo("上传服务内部错误"); msg.setInfo("上传服务内部错误");
try { file.delete(); } catch (Exception e) { }
return msg; return msg;
} }
file.delete();
msg.setData(jsonObject); msg.setData(jsonObject);
file.delete();
return msg; return msg;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
msg.setInfo("上传时发生了一些错误"); msg.setInfo("上传时发生了一些错误");
msg.setCode("110500"); msg.setCode("110500");
file.delete();
return msg; return msg;
} }
} }
@@ -215,7 +262,6 @@ public class UploadServicel {
String md5 = jsonObj.getString("md5"); String md5 = jsonObj.getString("md5");
String classifications = jsonObj.getString("classifications"); String classifications = jsonObj.getString("classifications");
Integer day = jsonObj.getInteger("day"); Integer day = jsonObj.getInteger("day");
String source = jsonObj.getString("source");
String imgIdentifier = jsonObj.getString("imgIdentifier"); String imgIdentifier = jsonObj.getString("imgIdentifier");
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
classifications = classifications==null?"":classifications; classifications = classifications==null?"":classifications;
@@ -302,18 +348,20 @@ public class UploadServicel {
return msg; return msg;
} }
private static Group group; // 上传用户或游客的所属分组 // private static Group group; // 上传用户或游客的所属分组
private static Long memory; // 上传用户或者游客的分配容量 memory // private static Long memory; // 上传用户或者游客的分配容量 memory
private static Long TotleMemory; // 用户或者游客下可使用的总容量 //maxsize // private static Long TotleMemory; // 用户或者游客下可使用的总容量 //maxsize
private static Long UsedTotleMemory; // 用户或者游客已经用掉的总容量 //usermemory // private static Long UsedTotleMemory; // 用户或者游客已经用掉的总容量 //usermemory
private static String updatePath = "tourist"; // private static String updatePath = "tourist";
// 判断用户 或 游客 当前上传图片的一系列校验 // 判断用户 或 游客 当前上传图片的一系列校验
private Msg updateImgCheck(User user, UploadConfig uploadConfig) { private Msg updateImgCheck(User user, UploadConfig uploadConfig) {
Msg msg = new Msg(); Msg msg = new Msg();
java.text.DateFormat dateFormat = null; JSONObject jsonObject = new JSONObject();
String updatePath = "tourist";
try { try {
dateFormat = new SimpleDateFormat("yyyy/MM/dd"); Group group = GetCurrentSource.GetSource(user == null ? null : user.getId());
jsonObject.put("group",group);
if (user == null) { if (user == null) {
if (uploadConfig.getIsupdate() != 1) { if (uploadConfig.getIsupdate() != 1) {
msg.setCode("1000"); msg.setCode("1000");
@@ -321,13 +369,15 @@ public class UploadServicel {
return msg; return msg;
} }
updatePath = "tourist"; updatePath = "tourist";
group = GetCurrentSource.GetSource(null); Long memory = Long.valueOf(uploadConfig.getVisitormemory()); // 单位 B 游客设置总量
memory = Long.valueOf(uploadConfig.getVisitormemory()); // 单位 B 游客设置总量 Long TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists()); // 单位 B 游客单文件大小
TotleMemory = Long.valueOf(uploadConfig.getFilesizetourists()); // 单位 B 游客单文件大小 Long UsedTotleMemory =
UsedTotleMemory =
imgServiceImpl.getusermemory(0) == null imgServiceImpl.getusermemory(0) == null
? 0L ? 0L
: imgServiceImpl.getusermemory(0); // 单位 B : imgServiceImpl.getusermemory(0); // 单位 B
jsonObject.put("memory",memory);
jsonObject.put("TotleMemory",TotleMemory);
jsonObject.put("UsedTotleMemory",UsedTotleMemory);
} else { } else {
if (uploadConfig.getUserclose() != 1) { if (uploadConfig.getUserclose() != 1) {
msg.setCode("1001"); msg.setCode("1001");
@@ -335,20 +385,26 @@ public class UploadServicel {
return msg; return msg;
} }
updatePath = user.getUsername(); updatePath = user.getUsername();
group = GetCurrentSource.GetSource(user.getId()); Long memory = Long.valueOf(user.getMemory()); // 单位 B *1024*1024
memory = Long.valueOf(user.getMemory()); // 单位 B *1024*1024 Long TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser()); // 单位 B
TotleMemory = Long.valueOf(uploadConfig.getFilesizeuser()); // 单位 B Long UsedTotleMemory =
UsedTotleMemory =
imgServiceImpl.getusermemory(user.getId()) == null imgServiceImpl.getusermemory(user.getId()) == null
? 0L ? 0L
: imgServiceImpl.getusermemory(user.getId()); // 单位 B : imgServiceImpl.getusermemory(user.getId()); // 单位 B
jsonObject.put("memory",memory);
jsonObject.put("TotleMemory",TotleMemory);
jsonObject.put("UsedTotleMemory",UsedTotleMemory);
} }
if (uploadConfig.getUrltype() == 2) { if (uploadConfig.getUrltype() == 2) {
updatePath = dateFormat.format(new Date()); LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
updatePath = currentDate.format(formatter);
} }
jsonObject.put("updatePath",updatePath);
msg.setData(jsonObject);
msg.setCode("300"); msg.setCode("300");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); logger.error("updateImgCheck异常:",e);
msg.setCode("500"); msg.setCode("500");
} }
return msg; return msg;
@@ -359,8 +415,6 @@ public class UploadServicel {
public static String plusDay(int setday) { public static String plusDay(int setday) {
Date d = new Date(); Date d = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currdate = format.format(d);
System.out.println("现在的日期是:" + currdate);
Calendar ca = Calendar.getInstance(); Calendar ca = Calendar.getInstance();
ca.setTime(d); ca.setTime(d);
ca.add(Calendar.DATE, setday); // num为增加的天数,可以改变的 ca.add(Calendar.DATE, setday); // num为增加的天数,可以改变的
@@ -0,0 +1,210 @@
package cn.hellohao.service.impl;
import cn.hellohao.config.GlobalConstant;
import cn.hellohao.pojo.Images;
import cn.hellohao.pojo.Keys;
import cn.hellohao.pojo.Msg;
import cn.hellohao.pojo.ReturnImage;
import cn.hellohao.service.ImgService;
import cn.hellohao.service.KeysService;
import cn.hellohao.utils.TypeDict;
import com.github.sardine.impl.methods.HttpMkCol;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.*;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;
@Service
public class WebDAVImageupload {
static CloseableHttpClient httpClient;
static Keys key;
@Autowired
private ImgService imgService;
@Autowired
private KeysService keysService;
private static Logger logger = LoggerFactory.getLogger(WebDAVImageupload.class);
public ReturnImage ImageuploadWebDAV(Map<Map<String, String>, File> fileMap, String username,Integer keyID) {
ReturnImage returnImage = new ReturnImage();
try {
if(null==httpClient || null==key){
System.out.println("WebDAV = 存储源对象为空");
returnImage.setCode("500");
return returnImage;
}
} catch (Exception e) {
logger.error("ImageuploadWebDAV:61异常",e);
System.out.println("WebDAV = 存储源对象为空");
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();
createDirectories(httpClient, key.getEndpoint(), "/" + username);
HttpPut httpPut = new HttpPut(key.getEndpoint() + "/" + username + "/" + ShortUIDName + "." + prefix);
FileEntity fileEntity = new FileEntity(file, ContentType.DEFAULT_BINARY);
httpPut.setEntity(fileEntity);
HttpResponse response = httpClient.execute(httpPut);
final int statusCode = response.getStatusLine().getStatusCode();
logger.info("WebDav上传响应代码:"+statusCode);
EntityUtils.consume(response.getEntity());
if(statusCode >= 200 && statusCode < 300){
returnImage.setCode("200");
}else{
returnImage.setCode(Integer.toString(statusCode));
}
}
} catch (Exception e) {
logger.error("ImageuploadWebDAV:87异常",e);
returnImage.setCode("500");
}
return returnImage;
}
//webdav初始化
public static Integer Initialize(Keys k) {
int ret = -1;
try {
if(k.getSysTransmit()==false){
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())
|| StringUtils.isBlank(k.getRequestAddress())) {
return -1;
}
}else{
if (StringUtils.isBlank(k.getAccessKey())
|| StringUtils.isBlank(k.getAccessSecret())
|| StringUtils.isBlank(k.getEndpoint())) {
return -1;
}
}
String endpoint = k.getEndpoint();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(k.getAccessKey(), k.getAccessSecret()));
CloseableHttpClient httpClientObj = HttpClients.custom()
.setDefaultCredentialsProvider(credentialsProvider)
.build();
HttpUriRequest request = RequestBuilder.create("PROPFIND")
.setUri(endpoint +"/"+ k.getRootPath())
.addHeader("Depth", "1")
.setEntity(new StringEntity(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
"<D:propfind xmlns:D=\"DAV:\">\n" +
" <D:allprop/>\n" +
"</D:propfind>",
ContentType.create("text/xml", "UTF-8")))
.build();
HttpResponse response = httpClientObj.execute(request);
System.out.println("=====>"+response.getStatusLine().getStatusCode());
if(response.getStatusLine().getStatusCode()==207 || response.getStatusLine().getStatusCode()==404){
ret = 1;
httpClient = httpClientObj;
key = k;
}else {
return -1;
}
EntityUtils.consume(response.getEntity());
} catch (Exception e) {
logger.error("WebDAV初始化失败", e);
return -1;
}
return ret;
}
public Boolean delWebDAV(Integer keyID, Images images) {
boolean b = true;
try {
Keys keys = keysService.selectKeys(images.getSource());
String rootPath = keys.getRootPath().equals("/")?"":keys.getRootPath();
String fileUrl = keys.getEndpoint()+"/"+images.getImgname();
System.err.println("删除缩yuan图:"+fileUrl);
HttpDelete httpDelete = new HttpDelete(fileUrl);
HttpResponse response = httpClient.execute(httpDelete);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 204) {
logger.info("File deleted: " + fileUrl);
// checkAndDeleteEmptyParentDirectories(httpClient,fileUrl);
} else {
logger.error("Failed to delete file: " + fileUrl);
}
EntityUtils.consume(response.getEntity());
} catch (Exception e) {
logger.error("WebDav删除异常:",e);
b = false;
}
return b;
}
public ResponseEntity<InputStreamResource> getWebDAV(String shortUuid) {
boolean b = true;
try {
Images images = null;
images = imgService.selectImgByShortlink(shortUuid);
Keys keys = keysService.selectKeys(images.getSource());
String rootPath = keys.getRootPath().equals("/")?"":keys.getRootPath();
String fileUrl = keys.getEndpoint()+"/"+images.getImgname();
HttpGet httpGet = new HttpGet(fileUrl);
HttpResponse response = httpClient.execute(httpGet);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "image/jpeg");
return ResponseEntity.ok()
.headers(headers)
.body(new InputStreamResource(response.getEntity().getContent()));
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
private static void createDirectories(CloseableHttpClient httpClient, String baseUrl, String directoryPath) throws Exception {
String[] directories = directoryPath.split("/");
String currentPath = baseUrl;
for (String directory : directories) {
currentPath += directory + "/";
HttpMkCol httpMkCol = new HttpMkCol(currentPath);
HttpResponse response = httpClient.execute(httpMkCol);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 201) {
System.out.println("Directory created: " + currentPath);
} else if (statusCode == 405) {
System.out.println("Directory already exists: " + currentPath);
} else {
System.err.println("Failed to create directory: " + currentPath);
}
EntityUtils.consume(response.getEntity());
}
}
}
@@ -26,6 +26,7 @@ public class deleImages {
@Autowired private USSImageupload ussImageupload; @Autowired private USSImageupload ussImageupload;
@Autowired private S3Imageupload s3Imageupload; @Autowired private S3Imageupload s3Imageupload;
@Autowired private FtpServiceImpl ftpService; @Autowired private FtpServiceImpl ftpService;
@Autowired private WebDAVImageupload webDAVImageupload;
@Autowired private ImgAndAlbumService imgAndAlbumService; @Autowired private ImgAndAlbumService imgAndAlbumService;
@Autowired private ImgTempService imgTempService; @Autowired private ImgTempService imgTempService;
@Autowired private ImgService imgService; @Autowired private ImgService imgService;
@@ -44,7 +45,7 @@ public class deleImages {
boolean isDele = false; boolean isDele = false;
try { try {
Images image = imgService.selectByPrimaryKey(imgIds[i]); Images image = imgService.selectByPrimaryKey(imgIds[i]);
if (!forceDel) { if (forceDel) {
try { try {
imgAndAlbumService.deleteImgAndAlbum(image.getImgurl()); imgAndAlbumService.deleteImgAndAlbum(image.getImgurl());
imgTempService.delImgAndExp(image.getImguid()); imgTempService.delImgAndExp(image.getImguid());
@@ -75,6 +76,8 @@ public class deleImages {
isDele = ftpService.delFTP(key.getId(), image); isDele = ftpService.delFTP(key.getId(), image);
} else if (key.getStorageType() == 8) { } else if (key.getStorageType() == 8) {
isDele = s3Imageupload.deleS3(key.getId(), image); isDele = s3Imageupload.deleS3(key.getId(), image);
}else if (key.getStorageType() == 9) {
isDele = webDAVImageupload.delWebDAV(key.getId(), image);
} else { } else {
System.err.println("未获取到对象存储参数,删除失败。"); System.err.println("未获取到对象存储参数,删除失败。");
} }
@@ -149,6 +152,8 @@ public class deleImages {
ftpService.delFTP(key.getId(), image); ftpService.delFTP(key.getId(), image);
} else if (key.getStorageType() == 8) { } else if (key.getStorageType() == 8) {
s3Imageupload.deleS3(key.getId(), image); s3Imageupload.deleS3(key.getId(), image);
}else if (key.getStorageType() == 9) {
webDAVImageupload.delWebDAV(key.getId(), image);
} else { } else {
System.err.println("未获取到对象存储参数,删除失败。"); System.err.println("未获取到对象存储参数,删除失败。");
} }
@@ -1,29 +1,51 @@
package cn.hellohao.utils; //package cn.hellohao.utils;
//
import sun.misc.BASE64Decoder; //import java.io.IOException;
import sun.misc.BASE64Encoder; //import java.util.Base64;
//
import java.io.IOException; ///**
import java.util.Base64; // * Created by Hellohao on 2019-08-27.
// */
/** //public class Base64Encryption {
* Created by Hellohao on 2019-08-27. //// public static void toBaseCode(String str) {
*/ //// String data = encryptBASE64(str.getBytes());
public class Base64Encryption { //// }
public static void toBaseCode(String str) { //// public static String decryptBASE64(String key) {
String data = encryptBASE64(str.getBytes()); //// byte[] b =null;
} //// try {
public static String decryptBASE64(String key) { //// b = (new BASE64Decoder()).decodeBuffer(key);
byte[] b =null; //// } catch (IOException e) {
try { //// e.printStackTrace();
b = (new BASE64Decoder()).decodeBuffer(key); //// }
} catch (IOException e) { //// return new String(b);
e.printStackTrace(); //// }
} //// public static String encryptBASE64(byte[] key) {
return new String(b); //// String string = "SGVsbG9oYW8K";
} //// return (new BASE64Encoder()).encodeBuffer(key).replaceAll("\r|\n", "");
public static String encryptBASE64(byte[] key) { //// }
String string = "SGVsbG9oYW8K"; //
return (new BASE64Encoder()).encodeBuffer(key).replaceAll("\r|\n", ""); //
} // public static void toBaseCode(String str) {
} // String data = encryptBASE64(str.getBytes());
// }
//
// public static String decryptBASE64(String key) {
// byte[] b = null;
// try {
// b = Base64.getDecoder().decode(key);
// } catch (IllegalArgumentException e) {
// e.printStackTrace();
// }
// return new String(b);
// }
//
// public static String encryptBASE64(byte[] key) {
// String string = "SGVsbG9oYW8K";
// return Base64.getEncoder().encodeToString(key);
// }
//
//
//
//
//
//}
@@ -1,9 +1,9 @@
package cn.hellohao.utils; package cn.hellohao.utils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;
import java.io.*; import java.io.*;
import java.util.Base64;
/** /**
* base64转为multipartFile工具类 * base64转为multipartFile工具类
@@ -74,21 +74,30 @@ public class Base64ToMultipartFile implements MultipartFile {
* @return * @return
*/ */
public static MultipartFile base64Convert(String base64) { public static MultipartFile base64Convert(String base64) {
String[] baseStrs = base64.split(","); // String[] baseStrs = base64.split(",");
// BASE64Decoder decoder = new BASE64Decoder();
// byte[] b = new byte[0];
// try {
// b = decoder.decodeBuffer(baseStrs[1]);
// } catch (IOException e) {
// e.printStackTrace();
// }
// for (int i = 0; i < b.length; ++i) {
// if (b[i] < 0) {
// b[i] += 256;
// }
// }
// return new Base64ToMultipartFile (b, baseStrs[0]);
BASE64Decoder decoder = new BASE64Decoder(); String[] baseStrs = base64.split(",");
byte[] b = new byte[0]; byte[] b = Base64.getDecoder().decode(baseStrs[1]);
try {
b = decoder.decodeBuffer(baseStrs[1]);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < b.length; ++i) { for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) { if (b[i] < 0) {
b[i] += 256; b[i] += 256;
} }
} }
return new Base64ToMultipartFile (b, baseStrs[0]); return new Base64ToMultipartFile(b, baseStrs[0]);
} }
+31 -8
View File
@@ -111,6 +111,30 @@ public class FirstRun implements InitializingBean {
RunSqlScript.RunInsert(instartConfdata); RunSqlScript.RunInsert(instartConfdata);
Print.Normal("Add table.confdata"); Print.Normal("Add table.confdata");
} }
Integer ret7 =
RunSqlScript.RunSelectCount(judgeTable + " 'keys' and column_name = 'SysTransmit'");
if (ret7 == 0) {
RunSqlScript.RunInsert(sql7);
Print.Normal("Add keys.SysTransmit");
}
Integer ret8 =
RunSqlScript.RunSelectCount(judgeTable + " 'imgdata' and column_name = 'brieflink'");
if (ret8 == 0) {
RunSqlScript.RunInsert(sql8);
Print.Normal("Add imgdata.brieflink");
}
Integer ret9 =
RunSqlScript.RunSelectCount(judgeTable + " 'imgdata' and column_name = 'shortlink'");
if (ret9 == 0) {
RunSqlScript.RunInsert(sql9);
Print.Normal("Add imgdata.shortlink");
}
Integer ret10 =
RunSqlScript.RunSelectCount(" select count(*) from tbed.keys where storageType='9'");
if (ret10 == 0) {
RunSqlScript.RunInsert(sql10);
Print.Normal("Add Webdav Config");
}
RunSqlScript.RunInsert(index_imgdata); RunSqlScript.RunInsert(index_imgdata);
RunSqlScript.RunInsert("ALTER TABLE tbed.`user` MODIFY id int auto_increment;"); RunSqlScript.RunInsert("ALTER TABLE tbed.`user` MODIFY id int auto_increment;");
Print.Normal("Stage success"); Print.Normal("Stage success");
@@ -121,7 +145,6 @@ public class FirstRun implements InitializingBean {
//检查表是否存在,后边加'imgdata' and column_name = 'explains' 检查字段是否存在 //检查表是否存在,后边加'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 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 = "; private String judgeTable = "select count(*) from information_schema.columns where TABLE_SCHEMA='tbed' and table_name = ";
//创建blacklist 2019-11-29
private String sql0 = private String sql0 =
"alter table `keys` add (Region varchar(255) DEFAULT null,RootPath varchar(255) DEFAULT '/');"; "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 sql1 = "select count(*) from information_schema.columns where table_name = 'uploadconfig' and column_name = 'blacklist'";
@@ -130,12 +153,12 @@ public class FirstRun implements InitializingBean {
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 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 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)"; private String sql6 = "alter table imgdata add explains varchar(5000)";
//添加album表字段userid private String sql7 =
private String sql7 = "alter table album add userid int(10)"; "alter table `keys` add SysTransmit varchar(50) DEFAULT NULL ;";
//添加imgdata表字段md5key private String sql8 = "alter table `imgdata` add brieflink varchar(100) DEFAULT null ;";
private String sql8 = "alter table imgdata add md5key varchar(5000)"; private String sql9 = "alter table `imgdata` add shortlink varchar(100) DEFAULT null ;";
// 图片标识名字段 // 图片标识名字段
private String sql11 = "alter table `imgdata` add idname varchar(255) DEFAULT '未命名' ;"; private String sql10 = "INSERT INTO `tbed`.`keys`(`id`, `AccessKey`, `AccessSecret`, `Endpoint`, `Bucketname`, `RequestAddress`, `storageType`, `keyname`, `Region`, `RootPath`, `SysTransmit`) VALUES (null, '账号', '密码', '连接', '', '存储源请求域名', 9, 'WebDAV', NULL, '/', NULL);";
private String sql12 = "alter table tbed.user add `token` varchar(255)"; private String sql12 = "alter table tbed.user add `token` varchar(255)";
//创建客户端程序相关表 //创建客户端程序相关表
@@ -188,9 +211,9 @@ public class FirstRun implements InitializingBean {
try { try {
File f = new File(filePath); File f = new File(filePath);
if (f.exists()) { if (f.exists()) {
System.out.print("文件存在"); logger.info("文件存在");
} else { } else {
System.out.print("文件不存在"); logger.info("文件不存在,准备创建");
// f.createNewFile();// 不存在则创建 // f.createNewFile();// 不存在则创建
FileUtil.createTempFile(f); FileUtil.createTempFile(f);
} }
@@ -39,8 +39,6 @@ public class GetCurrentSource {
userService = userServiceImpl; userService = userServiceImpl;
} }
public static Group GetSource(Integer userid) { public static Group GetSource(Integer userid) {
//UserType 0-未分配 1-游客 2-用户 3-管理员 //UserType 0-未分配 1-游客 2-用户 3-管理员
User user =null; User user =null;
@@ -31,7 +31,8 @@ public class GetSource {
FtpServiceImpl ftpService; FtpServiceImpl ftpService;
@Autowired @Autowired
S3Imageupload s3Imageupload; S3Imageupload s3Imageupload;
@Autowired
WebDAVImageupload webDAVImageupload;
public ReturnImage storageSource(Integer type, Map<Map<String, String>, File> fileMap, String userpath,Integer keyID){ public ReturnImage storageSource(Integer type, Map<Map<String, String>, File> fileMap, String userpath,Integer keyID){
ReturnImage returnImage = null; ReturnImage returnImage = null;
try { try {
@@ -51,6 +52,8 @@ public class GetSource {
returnImage = ftpService.FtpUploadFile(fileMap, userpath,keyID); returnImage = ftpService.FtpUploadFile(fileMap, userpath,keyID);
}else if(type==8){ }else if(type==8){
returnImage = s3Imageupload.ImageuploadS3(fileMap, userpath,keyID); returnImage = s3Imageupload.ImageuploadS3(fileMap, userpath,keyID);
}else if(type==9){
returnImage = webDAVImageupload.ImageuploadWebDAV(fileMap, userpath,keyID);
} }
else{ else{
new StorageSourceInitException("GetSource类捕捉异常:未找到存储源"); new StorageSourceInitException("GetSource类捕捉异常:未找到存储源");
@@ -65,7 +65,7 @@ public class ImgUrlUtil {
httpUrlConnection.setConnectTimeout(300000); httpUrlConnection.setConnectTimeout(300000);
httpUrlConnection.setReadTimeout(300000); httpUrlConnection.setReadTimeout(300000);
httpUrlConnection.connect(); httpUrlConnection.connect();
String code = new Integer(httpUrlConnection.getResponseCode()).toString(); String code = Integer.toString(httpUrlConnection.getResponseCode());
String message = httpUrlConnection.getResponseMessage(); String message = httpUrlConnection.getResponseMessage();
System.out.println("getResponseCode code ="+ code); System.out.println("getResponseCode code ="+ code);
System.out.println("getResponseMessage message ="+ message); System.out.println("getResponseMessage message ="+ message);
@@ -75,7 +75,7 @@ public class ImgUrlUtil {
throw new Exception("ResponseCode is not begin with 2,code="+code); throw new Exception("ResponseCode is not begin with 2,code="+code);
} }
map.put("Check","true"); map.put("Check","true");
System.out.println("连接正常"); // System.out.println("连接正常");
}catch(Exception ex){ }catch(Exception ex){
System.out.println(ex.getMessage()); System.out.println(ex.getMessage());
} }
@@ -85,7 +85,7 @@ public class ImgUrlUtil {
public static Map<String ,Object> downLoadFromUrl(String urlStr,String referer,String fileName,String savePath){ public static Map<String ,Object> downLoadFromUrl(String urlStr,String referer,String fileName,String savePath){
FileInputStream fileInputStream = null;
Map<String ,Object> resmap = new HashMap<>(); Map<String ,Object> resmap = new HashMap<>();
Map<String ,String> map = checkURLStatusCode(urlStr); Map<String ,String> map = checkURLStatusCode(urlStr);
if(map.size()==0 || map.get("Check").equals("false")){ if(map.size()==0 || map.get("Check").equals("false")){
@@ -120,7 +120,8 @@ public class ImgUrlUtil {
} }
//下载并且保存成功后 判断格式 如果不是图像格式 就删除 //下载并且保存成功后 判断格式 如果不是图像格式 就删除
if(new File(saveDir+File.separator+fileName).exists()){ if(new File(saveDir+File.separator+fileName).exists()){
Msg msg = TypeDict.FileMiME(file); fileInputStream = new FileInputStream(file);
Msg msg = TypeDict.FileMiME(fileInputStream);
if(msg.getCode().equals("200")){ if(msg.getCode().equals("200")){
File f = new File(saveDir+File.separator+fileName); File f = new File(saveDir+File.separator+fileName);
String imgPath = saveDir+File.separator+fileName+"."+(msg.getData().toString().replace("image/","")); String imgPath = saveDir+File.separator+fileName+"."+(msg.getData().toString().replace("image/",""));
@@ -137,9 +138,16 @@ public class ImgUrlUtil {
resmap.put("res",false); resmap.put("res",false);
resmap.put("StatusCode","500"); resmap.put("StatusCode","500");
} }
if(fileInputStream!=null){
fileInputStream.close();
}
return resmap; return resmap;
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); try{
if(fileInputStream!=null){
fileInputStream.close();
}
}catch (Exception e2){ }
resmap.put("res",false); resmap.put("res",false);
resmap.put("StatusCode","500"); resmap.put("StatusCode","500");
return resmap; return resmap;
@@ -1,10 +1,14 @@
package cn.hellohao.utils; package cn.hellohao.utils;
import cn.hellohao.service.impl.S3Imageupload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.*; import java.sql.*;
final class RunSqlScript { final class RunSqlScript {
private static Logger logger = LoggerFactory.getLogger(RunSqlScript.class);
public static String DBDRIVER = "com.mysql.cj.jdbc.Driver"; public static String DBDRIVER = "com.mysql.cj.jdbc.Driver";
public static String DBURL ; public static String DBURL ;
//现在使用的是mysql数据库,是直接连接的,所以此处必须有用户名和密码 //现在使用的是mysql数据库,是直接连接的,所以此处必须有用户名和密码
@@ -21,7 +25,7 @@ final class RunSqlScript {
try { try {
Class.forName(DBDRIVER); Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
e.printStackTrace(); logger.error("RunSqlScript[29]", e);
} }
//2、连接数据库 //2、连接数据库
//通过连接管理器连接数据库 //通过连接管理器连接数据库
@@ -29,14 +33,14 @@ final class RunSqlScript {
//在连接的时候直接输入用户名和密码才可以连接 //在连接的时候直接输入用户名和密码才可以连接
conn = DriverManager.getConnection(DBURL,USERNAME,PASSWORD); conn = DriverManager.getConnection(DBURL,USERNAME,PASSWORD);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); logger.error("RunSqlScript[36]", e);
} }
//3、向数据库中插入一条数据 //3、向数据库中插入一条数据
//String sql = "select count(*) from information_schema.columns where table_name = 'config' and column_name = 'id'"; //String sql = "select count(*) from information_schema.columns where table_name = 'config' and column_name = 'id'";
try { try {
stmt = conn.createStatement(); stmt = conn.createStatement();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); logger.error("RunSqlScript[43]", e);
} }
//4、执行语句 //4、执行语句
try { try {
@@ -46,7 +50,7 @@ final class RunSqlScript {
count = resultSet.getInt(1); count = resultSet.getInt(1);
} }
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); logger.error("RunSqlScript[53]", e);
return -1; return -1;
} }
//5、关闭操作 //5、关闭操作
@@ -54,7 +58,7 @@ final class RunSqlScript {
stmt.close(); stmt.close();
conn.close(); conn.close();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); logger.error("RunSqlScript[61]", e);
} }
return count; return count;
} }
@@ -71,8 +75,7 @@ final class RunSqlScript {
try { try {
Class.forName(DBDRIVER); Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
e.printStackTrace(); logger.error("RunSqlScript[78]", e);
Print.Normal("SqlHelper.java - ClassNotFoundException");
} }
//2、连接数据库 //2、连接数据库
//通过连接管理器连接数据库 //通过连接管理器连接数据库
@@ -80,23 +83,21 @@ final class RunSqlScript {
//在连接的时候直接输入用户名和密码才可以连接 //在连接的时候直接输入用户名和密码才可以连接
conn = DriverManager.getConnection(DBURL,USERNAME,PASSWORD); conn = DriverManager.getConnection(DBURL,USERNAME,PASSWORD);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); logger.error("RunSqlScript[86]", e);
Print.Normal("SqlHelper.java - SQLException1");
} }
try { try {
stmt = conn.createStatement(); stmt = conn.createStatement();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); logger.error("RunSqlScript[91]", e);
Print.Normal("SqlHelper.java - SQLException2");
} }
//4、执行语句 //4、执行语句
try { try {
count = stmt.executeUpdate(sql); count = stmt.executeUpdate(sql);
} catch (SQLException e) { } catch (SQLException e) {
if(e.getMessage().contains("Duplicate key name") && e.getMessage().contains("index_md5key_url")){ if(e.getMessage().contains("Duplicate key name") && e.getMessage().contains("index_md5key_url")){
Print.Normal("Database index already exists, skip this step."); logger.info("Database index already exists, skip this step.");
}else{ }else{
e.printStackTrace(); logger.error("RunSqlScript[100]", e);
} }
} }
//5、关闭操作 //5、关闭操作
@@ -104,7 +105,7 @@ final class RunSqlScript {
stmt.close(); stmt.close();
conn.close(); conn.close();
} catch (SQLException e) { } catch (SQLException e) {
Print.Normal("SqlHelper.java - SQLException4"); logger.error("RunSqlScript[108]", e);
} }
return count; return count;
} }
@@ -2,6 +2,9 @@ package cn.hellohao.utils;
import cn.hellohao.pojo.Chunk; import cn.hellohao.pojo.Chunk;
import cn.hellohao.pojo.Msg; import cn.hellohao.pojo.Msg;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.*; import java.io.*;
@@ -13,6 +16,7 @@ import java.text.DecimalFormat;
import java.util.stream.Stream; import java.util.stream.Stream;
public class SetFiles { public class SetFiles {
private static Logger logger = LoggerFactory.getLogger(SetFiles.class);
// 转换文件方法 // 转换文件方法
public static File changeFile(MultipartFile multipartFile) { public static File changeFile(MultipartFile multipartFile) {
// 获取文件名 // 获取文件名
@@ -47,17 +51,16 @@ public class SetFiles {
// 转换文件方法 // 转换文件方法
public static File changeFile_new(MultipartFile multipartFile) { public static File changeFile_new(MultipartFile multipartFile) {
// 获取文件名
String fileName = multipartFile.getOriginalFilename();//getOriginalFilename String fileName = multipartFile.getOriginalFilename();//getOriginalFilename
// 获取文件后缀
String prefix = fileName.substring(fileName.lastIndexOf(".")); String prefix = fileName.substring(fileName.lastIndexOf("."));
// todo 修改临时文件文件名 // todo 修改临时文件文件名
File file = null; File file = null;
try { try {
file = File.createTempFile(fileName, prefix); String new_FileName = System.getProperty("java.io.tmpdir")+"hellohao_tmp_upload"+File.separator+fileName;
multipartFile.transferTo(file); file = new File(new_FileName);
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); logger.error("SetFiles.changeFile_new", e);
} }
return file; return file;
} }
@@ -7,15 +7,16 @@ import javax.imageio.ImageIO;
import java.awt.*; import java.awt.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
public class TypeDict { public class TypeDict {
//apache大法 //apache大法
public static Msg FileMiME(File file ){ public static Msg FileMiME(InputStream stream){
final Msg msg = new Msg(); final Msg msg = new Msg();
try { try {
Tika tika = new Tika(); Tika tika = new Tika();
String fileType = tika.detect(file); String fileType = tika.detect(stream);
if (fileType != null && fileType.contains("/")) { if (fileType != null && fileType.contains("/")) {
if(fileType.contains("image/")){ if(fileType.contains("image/")){
msg.setData(fileType); msg.setData(fileType);
@@ -30,22 +30,22 @@ private static final int VALICATE_CODE_LENGTH = 4;
* @param height * @param height
*/ */
private static void fillBackground(Graphics graphics, int width, int height) { private static void fillBackground(Graphics graphics, int width, int height) {
// 填充背景 // 填充背景
graphics.setColor(Color.WHITE); graphics.setColor(Color.WHITE);
//设置矩形坐标x y 为0 //设置矩形坐标x y 为0
graphics.fillRect(0, 0, width, height); graphics.fillRect(0, 0, width, height);
// 加入干扰线条 // 加入干扰线条
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
//设置随机颜色算法参数 //设置随机颜色算法参数
graphics.setColor(RandomUtils.randomColor(40, 150)); graphics.setColor(RandomUtils.randomColor(40, 150));
Random random = new Random(); Random random = new Random();
int x = random.nextInt(width); int x = random.nextInt(width);
int y = random.nextInt(height); int y = random.nextInt(height);
int x1 = random.nextInt(width); int x1 = random.nextInt(width);
int y1 = random.nextInt(height); int y1 = random.nextInt(height);
graphics.drawLine(x, y, x1, y1); graphics.drawLine(x, y, x1, y1);
} }
} }
/** /**
@@ -59,15 +59,15 @@ graphics.drawLine(x, y, x1, y1);
*/ */
@Override @Override
public String generate(int width, int height, OutputStream os) throws IOException { public String generate(int width, int height, OutputStream os) throws IOException {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics(); Graphics graphics = image.getGraphics();
fillBackground(graphics, width, height); fillBackground(graphics, width, height);
String randomStr = RandomUtils.randomString(VALICATE_CODE_LENGTH); String randomStr = RandomUtils.randomString(VALICATE_CODE_LENGTH);
createCharacter(graphics, randomStr); createCharacter(graphics, randomStr);
graphics.dispose(); graphics.dispose();
//设置JPEG格式 //设置JPEG格式
ImageIO.write(image, "JPEG", os); ImageIO.write(image, "JPEG", os);
return randomStr; return randomStr;
} }
/** /**
@@ -79,20 +79,20 @@ return randomStr;
*/ */
@Override @Override
public VerifyCode generate(int width, int height) { public VerifyCode generate(int width, int height) {
VerifyCode verifyCode = null; VerifyCode verifyCode = null;
try ( try (
//将流的初始化放到这里就不需要手动关闭流 //将流的初始化放到这里就不需要手动关闭流
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
) { ) {
String code = generate(width, height, baos); String code = generate(width, height, baos);
verifyCode = new VerifyCode(); verifyCode = new VerifyCode();
verifyCode.setCode(code); verifyCode.setCode(code);
verifyCode.setImgBytes(baos.toByteArray()); verifyCode.setImgBytes(baos.toByteArray());
} catch (IOException e) { } catch (IOException e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
verifyCode = null; verifyCode = null;
} }
return verifyCode; return verifyCode;
} }
/** /**
@@ -102,15 +102,15 @@ return verifyCode;
* @param randomStr * @param randomStr
*/ */
private void createCharacter(Graphics g, String randomStr) { private void createCharacter(Graphics g, String randomStr) {
char[] charArray = randomStr.toCharArray(); char[] charArray = randomStr.toCharArray();
for (int i = 0; i < charArray.length; i++) { for (int i = 0; i < charArray.length; i++) {
//设置RGB颜色算法参数 //设置RGB颜色算法参数
g.setColor(new Color(50 + RandomUtils.nextInt(100), g.setColor(new Color(50 + RandomUtils.nextInt(100),
50 + RandomUtils.nextInt(100), 50 + RandomUtils.nextInt(100))); 50 + RandomUtils.nextInt(100), 50 + RandomUtils.nextInt(100)));
//设置字体大小,类型 //设置字体大小,类型
g.setFont(new Font(FONT_TYPES[RandomUtils.nextInt(FONT_TYPES.length)], Font.BOLD, 26)); g.setFont(new Font(FONT_TYPES[RandomUtils.nextInt(FONT_TYPES.length)], Font.BOLD, 26));
//设置x y 坐标 //设置x y 坐标
g.drawString(String.valueOf(charArray[i]), 15 * i + 5, 19 + RandomUtils.nextInt(8)); g.drawString(String.valueOf(charArray[i]), 15 * i + 5, 19 + RandomUtils.nextInt(8));
} }
} }
} }
+1 -1
View File
@@ -4,7 +4,7 @@ server.port=10088
#前端域名需要带协议头http(s):// #前端域名需要带协议头http(s)://
CROS_ALLOWED_ORIGINS=${HELLOHAO_WEB_HOST:http://127.0.0.1:8080} CROS_ALLOWED_ORIGINS=${HELLOHAO_WEB_HOST:http://127.0.0.1:8080}
#数据库账号 #数据库账号
spring.datasource.username=${MYSQL_NAME:root} spring.datasource.username=${MYSQL_USERNAME:root}
#数据库密码test #数据库密码test
spring.datasource.password=${MYSQL_PASS:root} spring.datasource.password=${MYSQL_PASS:root}
#数据库链接地址 #数据库链接地址
+2 -2
View File
@@ -41,10 +41,10 @@
<where> <where>
1=1 1=1
<if test="albumkey != null"> <if test="albumkey != null">
and `albumkey` like '%${albumkey}%' and `albumkey` like CONCAT('%', #{albumkey}, '%')
</if> </if>
<if test="username != null"> <if test="username != null">
and `username` like '%${username}%' and `username` like CONCAT('%', #{username}, '%')
</if> </if>
<if test="userid != null"> <if test="userid != null">
and a.userid = #{userid} and a.userid = #{userid}
+16 -7
View File
@@ -53,11 +53,11 @@
<choose> <choose>
<when test="selecttype==1"> <when test="selecttype==1">
and and
a.userid in ( SELECT id from `user` where username LIKE '%${username}%') a.userid in ( SELECT id from `user` where username LIKE CONCAT('%', #{username}, '%'))
</when> </when>
<otherwise> <otherwise>
and and
a.userid not in ( SELECT id from `user` where username LIKE '%${username}%') a.userid not in ( SELECT id from `user` where username LIKE CONCAT('%', #{username}, '%'))
</otherwise> </otherwise>
</choose> </choose>
</if> </if>
@@ -71,10 +71,10 @@
and CONCAT( and CONCAT(
imgurl, imgurl,
idname idname
) LIKE '%${searchname}%' ) LIKE CONCAT('%', #{searchname}, '%')
</if> </if>
<if test="idname != null and idname !=''"> <if test="idname != null and idname !=''">
and idname LIKE '%${idname}%' and idname LIKE CONCAT('%', #{idname}, '%')
</if> </if>
order by order by
<choose> <choose>
@@ -126,13 +126,14 @@
`format`, `format`,
about, about,
violation, violation,
idname idname,
brieflink,
shortlink
) )
VALUES (null, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype}, VALUES (null, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype},
#{explains},#{md5key},#{imguid},#{format},#{about},null,#{idname}) #{explains},#{md5key},#{imguid},#{format},#{about},null,#{idname},#{brieflink},#{shortlink})
</insert> </insert>
<!-- 此用户下总数 --> <!-- 此用户下总数 -->
<select id="countimg" parameterType="integer" resultType="integer"> <select id="countimg" parameterType="integer" resultType="integer">
select count(*) from imgdata where userid = #{userid} select count(*) from imgdata where userid = #{userid}
@@ -150,6 +151,14 @@
select * from imgdata where id = #{id} select * from imgdata where id = #{id}
</select> </select>
<select id="selectImgByBrieflink" parameterType="string" resultType="cn.hellohao.pojo.Images">
select * from imgdata where binary brieflink = #{brieflink}
</select>
<select id="selectImgByShortlink" parameterType="string" resultType="cn.hellohao.pojo.Images">
select * from imgdata where binary shortlink = #{shortlink}
</select>
<select id="counts" resultType="integer"> <select id="counts" resultType="integer">
select count(*) from imgdata where 1=1 select count(*) from imgdata where 1=1
<if test="userid != null"> <if test="userid != null">
+3 -1
View File
@@ -28,6 +28,7 @@
WHEN storageType=6 THEN '腾讯云' WHEN storageType=6 THEN '腾讯云'
WHEN storageType=7 THEN 'FTP' WHEN storageType=7 THEN 'FTP'
WHEN storageType=8 THEN 'S3协议' WHEN storageType=8 THEN 'S3协议'
WHEN storageType=9 THEN 'WebDAV'
ELSE '未知' END AS storageName, ELSE '未知' END AS storageName,
keyname keyname
FROM `keys` GROUP BY storageType,id,storageName,keyname FROM `keys` GROUP BY storageType,id,storageName,keyname
@@ -51,7 +52,8 @@
RequestAddress = #{RequestAddress}, RequestAddress = #{RequestAddress},
keyname = #{keyname}, keyname = #{keyname},
Region = #{Region}, Region = #{Region},
RootPath = #{RootPath} RootPath = #{RootPath},
SysTransmit=#{SysTransmit}
WHERE WHERE
storageType = #{storageType} storageType = #{storageType}
</update> </update>
+3 -13
View File
@@ -53,7 +53,6 @@
</where> </where>
</select> </select>
<!-- 查询当前用户:根据邮箱,根据id -->
<select id="getUsers" parameterType="cn.hellohao.pojo.User" resultType="cn.hellohao.pojo.User"> <select id="getUsers" parameterType="cn.hellohao.pojo.User" resultType="cn.hellohao.pojo.User">
SELECT id, SELECT id,
username, username,
@@ -85,7 +84,7 @@
</if> </if>
</where> </where>
</select> </select>
<!-- 查询当前用户:根据id -->
<select id="getUsersid" parameterType="integer" resultType="cn.hellohao.pojo.User"> <select id="getUsersid" parameterType="integer" resultType="cn.hellohao.pojo.User">
SELECT id, SELECT id,
username, username,
@@ -101,7 +100,7 @@
FROM user FROM user
WHERE id = #{id} WHERE id = #{id}
</select> </select>
<!-- 查询当前用户:根据uid -->
<select id="getUsersMail" parameterType="string" resultType="cn.hellohao.pojo.User"> <select id="getUsersMail" parameterType="string" resultType="cn.hellohao.pojo.User">
SELECT id, SELECT id,
username, username,
@@ -118,13 +117,6 @@
WHERE uid = #{uid} WHERE uid = #{uid}
</select> </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)-->
<!-- VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype},#{md5key},#{imguid},#{format},#{about},null)-->
<!-- </insert>-->
<!-- 修改资料 -->
<update id="change" parameterType="cn.hellohao.pojo.User"> <update id="change" parameterType="cn.hellohao.pojo.User">
UPDATE `user` UPDATE `user`
<set> <set>
@@ -185,12 +177,10 @@
SELECT count(username) FROM `user` where username=#{username} SELECT count(username) FROM `user` where username=#{username}
</select> </select>
<!-- 查询用户总数 -->
<select id="getUserTotal" resultType="integer"> <select id="getUserTotal" resultType="integer">
SELECT count(*) FROM `user` SELECT count(*) FROM `user`
</select> </select>
<!-- 获取用户的详细信息 -->
<select id="getuserlist" resultType="cn.hellohao.pojo.User" parameterType="string"> <select id="getuserlist" resultType="cn.hellohao.pojo.User" parameterType="string">
SELECT SELECT
id, id,
@@ -213,7 +203,7 @@
and CONCAT( and CONCAT(
username, username,
email email
) LIKE '%${username}%' ) LIKE CONCAT('%', #{username}, '%')
</if> </if>
order by birthder desc order by birthder desc
</select> </select>