From f1dc16feb63da3ca515db6ff6ea6da3b74df7cfa Mon Sep 17 00:00:00 2001 From: Hellohao <923453645@qq.com> Date: Thu, 7 Nov 2019 21:47:53 +0800 Subject: [PATCH] =?UTF-8?q?2019-11-7=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 25 + .../controller/AdminRootController.java | 9 +- .../hellohao/controller/ClientController.java | 309 ++++++++++- .../controller/UpdateImgController.java | 513 ++++++++---------- src/main/java/cn/hellohao/dao/ImgMapper.java | 2 +- src/main/java/cn/hellohao/pojo/Config.java | 34 +- src/main/java/cn/hellohao/pojo/Images.java | 23 +- .../java/cn/hellohao/service/ImgService.java | 2 +- .../hellohao/service/impl/ImgServiceImpl.java | 4 +- .../service/impl/KODOImageupload.java | 1 - .../hellohao/utils/AfterServiceStarted.java | 10 +- .../java/cn/hellohao/utils/DateUtils.java | 2 +- src/main/java/cn/hellohao/utils/GetIPS.java | 31 ++ .../java/cn/hellohao/utils/GetSource.java | 54 ++ .../java/cn/hellohao/utils/ImageReview.java | 3 - src/main/java/cn/hellohao/utils/Sentence.java | 40 +- src/main/resources/application.properties | 4 +- src/main/resources/mapper/ConfigMapper.xml | 9 + src/main/resources/mapper/ImgMapper.xml | 7 +- src/main/resources/mapper/UserMapper.xml | 4 +- src/main/resources/static/img/ds.jpg | Bin 0 -> 116049 bytes .../resources/static/webuploade/js/upload.js | 15 +- src/main/resources/templates/admin/about.html | 5 +- src/main/resources/templates/admin/table.html | 31 +- .../resources/templates/admin/webconfig.html | 51 +- src/main/resources/templates/index.html | 210 ++++--- 26 files changed, 912 insertions(+), 486 deletions(-) create mode 100644 src/main/java/cn/hellohao/utils/GetIPS.java create mode 100644 src/main/java/cn/hellohao/utils/GetSource.java create mode 100644 src/main/resources/static/img/ds.jpg diff --git a/pom.xml b/pom.xml index f7fe939..0feb0f6 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,12 @@ 5.5.7 + + cn.ucloud.ufile + ufile-client-java + 2.3.0 + + commons-net commons-net @@ -163,6 +169,25 @@ pagehelper-spring-boot-starter 1.2.10 + + + org.apache.httpcomponents + httpclient + 4.5 + + + org.apache.httpcomponents + httpmime + 4.5 + + + org.springframework + spring-test + 5.1.9.RELEASE + compile + + + diff --git a/src/main/java/cn/hellohao/controller/AdminRootController.java b/src/main/java/cn/hellohao/controller/AdminRootController.java index 2ea02ff..8db9c88 100644 --- a/src/main/java/cn/hellohao/controller/AdminRootController.java +++ b/src/main/java/cn/hellohao/controller/AdminRootController.java @@ -81,8 +81,6 @@ public class AdminRootController { model.addAttribute("StorageType", 5);//切换到本地 model.addAttribute("Endpoint2", 0); } - - return "admin/storageconfig"; } @@ -203,10 +201,7 @@ public class AdminRootController { //修改站点配置 @PostMapping("/updateconfig") @ResponseBody -// public Integer updateconfig(String webname,String explain, String video, -// Integer backtype, String links, String notice,String baidu, -// String domain,String background1,String background2 ) { - public Integer updateconfig(Config config ) { + public Integer updateconfig(Config config ) { Integer ret = configService.setSourceype(config); return ret; @@ -284,7 +279,7 @@ public class AdminRootController { String urls ="http://tc.hellohao.cn/systemupdate"; paramMap.put("dates",dates); String result= HttpUtil.post(urls, paramMap); - System.out.println(Integer.parseInt( result )); +// System.out.println(Integer.parseInt( result )); return Integer.parseInt( result ); } diff --git a/src/main/java/cn/hellohao/controller/ClientController.java b/src/main/java/cn/hellohao/controller/ClientController.java index 7d44cd6..9339de2 100644 --- a/src/main/java/cn/hellohao/controller/ClientController.java +++ b/src/main/java/cn/hellohao/controller/ClientController.java @@ -12,11 +12,10 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author Hellohao @@ -49,6 +48,8 @@ public class ClientController { private FTPImageupload ftpImageupload; @Autowired private DomainService domainService; + @Autowired + private ImgService imgService; @Value("${systemupdate}") private String systemupdate; @@ -164,7 +165,13 @@ public class ClientController { } img.setSizes((entry.getValue())); img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(0); + //img.setAbnormal(Sentence.getIPs()); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + img.setImgtype(0); //-1证明超出大小, if (entry.getValue() != -1) { userService.insertimg(img); @@ -198,7 +205,13 @@ public class ClientController { } img.setSizes((entry.getValue())/1024); img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(0); + //img.setAbnormal(Sentence.getIPs()); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + img.setImgtype(0); //-1证明超出大小, if (entry.getValue() != -1) { userService.insertimg(img); @@ -220,6 +233,290 @@ public class ClientController { return resultBean; } + @PostMapping(value = "/clientupurlimg") + @ResponseBody + public ResultBean clientupurlimg( String imgurl, HttpServletRequest request, Integer setday, + String email,String pass) throws Exception { + ResultBean resultBean = null; + UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); + if (uploadConfig.getApi() == 1) { + if (email != null && pass != null) { + Integer ret = userService.login(email, Base64Encryption.encryptBASE64(pass.getBytes())); + if (ret > 0) { + User u = userService.getUsers(email); + Config config = configService.getSourceype();//查询当前系统使用的存储源类型。 + Integer usermemory =0; + Integer memory =0; + Integer Sourcekey=0; + if(u==null){ + Sourcekey = GetCurrentSource.GetSource(null); + memory = uploadConfig.getVisitormemory(); + usermemory= imgService.getusermemory(0); + if(usermemory==null){usermemory = 0;} + }else{ + Sourcekey = GetCurrentSource.GetSource(u.getId()); + memory = userService.getUsers(u.getEmail()).getMemory(); + usermemory= imgService.getusermemory(u.getId()); + if(usermemory==null){usermemory = 0;} + } + String userpath = "tourist"; + if(uploadConfig.getUrltype()==2){ + java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd"); + userpath = dateFormat.format(new Date()); + }else{if (u != null) { userpath = u.getUsername();}} + JSONArray jsonArray = new JSONArray(); + + Keys key = keysService.selectKeys(Sourcekey); + long imgsize = ImgUrlUtil.getFileLength(imgurl); + Integer youke = uploadConfig.getFilesizetourists(); + Integer yonghu = uploadConfig.getFilesizeuser(); + String uuid= UUID.randomUUID().toString().replace("-", ""); + Boolean bo =false; + if(Sourcekey==5){ + bo =true; + }else{bo = StringUtils.doNull(Sourcekey,key);//判断对象是否有空值 + } +// //容量判断 + if(u==null){ + memory = uploadConfig.getVisitormemory(); + usermemory= imgService.getusermemory(0); + if(usermemory==null){usermemory = 0;} + }else{ + memory = userService.getUsers(u.getEmail()).getMemory(); + usermemory= imgService.getusermemory(u.getId()); + if(usermemory==null){usermemory = 0;} + } + //先判断对象存储key是不是null + Print.warning("上传地址是:"+request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bo){ + if(usermemory/10240 && imgsize<=(yonghu*1024*1024)){ + try{ + boolean bl =ImgUrlUtil.downLoadFromUrl(imgurl, + uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bl==true){ + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + byte[] b = new byte[3]; + is.read(b, 0, b.length); + String xxx = ImgUrlUtil.bytesToHexString(b); + xxx = xxx.toUpperCase(); + System.out.println("头文件是:" + xxx); + String ooo = TypeDict.checkType(xxx); + System.out.println("后缀名是:" + ooo); + if(is!=null){ + is.close(); + } + //判断文件头是否是图片 + if(!ooo.equals("0000")){ + Map map = new HashMap<>(); + map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + Map m = null; + if(key.getStorageType()==1){ + m = nOSImageupload.Imageupload(null, userpath,map,setday); + }else if (key.getStorageType()==2){ + m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); + }else if(key.getStorageType()==3){ + m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); + }else if(key.getStorageType()==4){ + m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); + }else if(key.getStorageType()==5){ + m = LocUpdateImg.ImageuploadLOC(null,userpath,map,setday); + }else if(key.getStorageType()==6){ + m = cosImageupload.ImageuploadCOS(null,userpath,map,setday); + }else if(key.getStorageType()==7){ + m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); + } + else{ + System.err.println("未获取到对象存储参数,上传失败。"); + } + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:"+times); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 + }else{ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + } + }else{ + jsonArray.add(entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl()); + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + if (u == null) { + img.setUserid(0);//用户id + } else { + img.setUserid(u.getId());//用户id + } + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + //img.setAbnormal(Sentence.getIPs()); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + img.setImgtype(0); + userService.insertimg(img); + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + } + resultBean = ResultBean.success(jsonArray); + }else{ + resultBean = ResultBean.error(-3,"文件类型不符合要求"); + } + } + }catch (Exception e) { + // TODO: handle exception + Print.warning(e.toString()); + resultBean = ResultBean.error(-4,"该文件不支持上传"); + } + }else{ + //文件过大 + resultBean = ResultBean.error(-2,"文件过大"); + } + }else{ + if(imgsize>0 && imgsize<=(youke*1024*1024)){ + try{ + boolean bl = ImgUrlUtil.downLoadFromUrl(imgurl, + uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bl==true){ + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + byte[] b = new byte[3]; + is.read(b, 0, b.length); + String xxx = ImgUrlUtil.bytesToHexString(b); + xxx = xxx.toUpperCase(); + //System.out.println("头文件是:" + xxx); + String ooo = TypeDict.checkType(xxx); + //System.out.println("后缀名是:" + ooo); + if(is!=null){ + is.close(); + } + //判断文件头是否是图片 + if(!xxx.equals("0000")){ + Map map = new HashMap<>(); + map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + Map m = null; + if(key.getStorageType()==1){ + m = nOSImageupload.Imageupload(null, userpath,map,setday); + }else if (key.getStorageType()==2){ + m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); + }else if(key.getStorageType()==3){ + m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); + }else if(key.getStorageType()==4){ + m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); + }else if(key.getStorageType()==5){ + m =LocUpdateImg.ImageuploadLOC(null,userpath, map,setday); + }else if(key.getStorageType()==6){ + m =cosImageupload.ImageuploadCOS(null,userpath, map,setday); + }else if(key.getStorageType()==7){ + m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); + } + else{ + System.err.println("未获取到对象存储参数,上传失败。"); + } + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:"+times); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 + }else{ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + } + }else{ + jsonArray.add(entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl());//图片链接 + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + if (u == null) { + img.setUserid(0);//用户id + } else { + img.setUserid(u.getId());//用户id + } + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + //img.setAbnormal(Sentence.getIPs()); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + img.setImgtype(0); + userService.insertimg(img); + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + } + //上传成功 + resultBean = ResultBean.success(jsonArray); + }else{ + resultBean = ResultBean.error(-3,"文件类型不符合要求"); + } + } + }catch (Exception e) { + // TODO: handle exception + Print.warning(e.toString()); + resultBean = ResultBean.error(-4,"文件类型不符合要求"); + } + }else{ + //文件过大 + resultBean = ResultBean.error(-2,"图片太大或不存在"); + } + } + }else{ + resultBean = ResultBean.error(-5,"可用空间不足"); + } + }else{ + resultBean = ResultBean.error(-1,"未配置存储源"); + } + }else {resultBean = ResultBean.error(-2, "此用户信息不正确。");} + }else {resultBean = ResultBean.error(-3, "邮箱或密码为空");} + }else{resultBean = ResultBean.error(-4, "管理员关闭了API接口");} +Print.Normal(resultBean.toString()); + return resultBean; +/** + * 错误返回值含义: + * -1 存储源key未配置 + * -2 目标图片太大或者不存在 + * -3 文件类型不符合要求 + * */ + } + + @RequestMapping("/clientlogin") + @ResponseBody + public String login( HttpSession httpSession, String email, String password) { + JSONArray jsonArray = new JSONArray(); + String basepass = Base64Encryption.encryptBASE64(password.getBytes()); + Integer ret = userService.login(email, basepass); + if (ret > 0) { + User user = userService.getUsers(email); + if (user.getIsok() == 1) { + jsonArray.add(1); + } else if(ret==-1){ + jsonArray.add(-1); + }else { + jsonArray.add(-2); + } + } else { + jsonArray.add(0); + } + return jsonArray.toString(); + } + @GetMapping (value = "/notices") @ResponseBody public String notices() throws Exception { diff --git a/src/main/java/cn/hellohao/controller/UpdateImgController.java b/src/main/java/cn/hellohao/controller/UpdateImgController.java index 3b0c4e8..cb33750 100644 --- a/src/main/java/cn/hellohao/controller/UpdateImgController.java +++ b/src/main/java/cn/hellohao/controller/UpdateImgController.java @@ -51,6 +51,7 @@ public class UpdateImgController { @Autowired private ImgService imgService; + private Integer updatekey; @RequestMapping({"/", "/index"}) public String indexImg(Model model, HttpSession httpSession) { @@ -104,6 +105,9 @@ public class UpdateImgController { }else{ return "index"; } + Random random = new Random(); + updatekey = random.nextInt(10000); + model.addAttribute("updatekey", updatekey); return "index"; } @@ -111,7 +115,8 @@ public class UpdateImgController { @RequestMapping(value = "/upimg") @ResponseBody public String upimg( HttpSession session - , @RequestParam(value = "file", required = false) MultipartFile[] file,Integer setday) throws Exception { + , @RequestParam(value = "file", required = false) MultipartFile multipartFile,Integer setday,String upurlk) throws Exception { + java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd"); JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); Config config = configService.getSourceype(); @@ -120,363 +125,283 @@ public class UpdateImgController { Integer usermemory =0; Integer memory =0; Integer Sourcekey=0; + Integer maxsize = 0; + String userpath = "tourist"; + Boolean b =false; + + if(Integer.parseInt(Base64Encryption.decryptBASE64(upurlk))!=updatekey){ + jsonObject.put("imgurls",403);//非法调用 + return jsonObject.toString(); + } if(u==null){ Sourcekey = GetCurrentSource.GetSource(null); memory = uploadConfig.getVisitormemory(); + maxsize = uploadConfig.getFilesizetourists(); usermemory= imgService.getusermemory(0); if(usermemory==null){usermemory = 0;} }else{ + userpath = u.getUsername(); Sourcekey = GetCurrentSource.GetSource(u.getId()); memory = userService.getUsers(u.getEmail()).getMemory(); + maxsize = uploadConfig.getFilesizeuser(); usermemory= imgService.getusermemory(u.getId()); if(usermemory==null){usermemory = 0;} } - Keys key = keysService.selectKeys(Sourcekey);//config.getSourcekey() - Boolean b =false; - if(Sourcekey==5){ - b =true; - }else{ - b = StringUtils.doNull(Sourcekey,key);//判断对象是否有空值 + //查询到如果使用目录格式是日期,就重新给userpath赋值 + if(uploadConfig.getUrltype()==2){ + userpath = dateFormat.format(new Date()); } - if(b){ - int tmp = usermemory/1024; - if(memory==-1){//证明未做限制 - tmp = -2; - } - if(tmp=memory){ + jsonObject.put("imgurls",-5);//可用空间不足 + return jsonObject.toString(); + } + long stime = System.currentTimeMillis(); + Map map = new HashMap<>(); + //for (MultipartFile multipartFile : file) { + Print.Normal("文件大小:"+multipartFile.getSize()); + if(multipartFile.getSize()>maxsize*1024*1024){ + jsonObject.put("imgurls",-6);//超出设定大小 + return jsonObject.toString(); + } + // 获取ImageReader对象的迭代器 + String fileName = multipartFile.getOriginalFilename(); + String lastname = fileName.substring(fileName.lastIndexOf(".") + 1);//获取文件后缀 + if (!multipartFile.isEmpty()) { //判断文件是否为空 + map.put(lastname, multipartFile); + } + //} + Map m = null; + m = GetSource.storageSource(key.getStorageType(),map, userpath,null,setday); + //开始存数据 + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + Print.Normal("上传图片的时间是:"+df.format(new Date())); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonObject.put("imgurls",config.getDomain()+"/links/"+entry.getKey().getImgurl()); + jsonObject.put("imgnames",entry.getKey().getImgname()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 }else{ - if (u != null) { - userpath = u.getUsername(); - } - } - Map map = new HashMap<>(); - for (MultipartFile multipartFile : file) { - - // 获取ImageReader对象的迭代器 - //获取文件名 - String fileName = multipartFile.getOriginalFilename(); - String lastname = fileName.substring(fileName.lastIndexOf(".") + 1);//获取文件后缀 - if (!multipartFile.isEmpty()) { //判断文件是否为空 - map.put(lastname, multipartFile); - System.out.println("===name==="+multipartFile.getOriginalFilename()); //文件名 - //multipartFile.getSize(); //文件大小 - } - } - Map m = null; - if(key.getStorageType()==1){ - m = nOSImageupload.Imageupload(map, userpath,null,setday); - }else if (key.getStorageType()==2){ - m = ossImageupload.ImageuploadOSS(map, userpath,null,setday); - }else if(key.getStorageType()==3){ - m = ussImageupload.ImageuploadUSS(map, userpath,null,setday); - }else if(key.getStorageType()==4){ - m = kodoImageupload.ImageuploadKODO(map, userpath,null,setday); - }else if(key.getStorageType()==5){ - m = LocUpdateImg.ImageuploadLOC(map, userpath,null,setday); - }else if(key.getStorageType()==6){ - m = cosImageupload.ImageuploadCOS(map, userpath,null,setday); - }else if(key.getStorageType()==7){ - m = ftpImageupload.ImageuploadFTP(map, userpath,null,setday); - } - else{ - System.err.println("未获取到对象存储参数,上传失败。"); - } - Images img = new Images(); - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); - String times = df.format(new Date()); - System.out.println("上传图片的时间是:"+times); - for (Map.Entry entry : m.entrySet()) { - if(key.getStorageType()==5){ - if(config.getDomain()!=null){ - jsonObject.put("imgurls",config.getDomain()+"/links/"+entry.getKey().getImgurl()); - jsonObject.put("imgnames",entry.getKey().getImgname()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 - }else{ - jsonObject.put("imgurls",config.getDomain()+"/links/"+entry.getKey().getImgurl()); - jsonObject.put("imgnames",entry.getKey().getImgname()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 - } - }else{ - jsonObject.put("imgurls",entry.getKey().getImgurl()); - jsonObject.put("imgnames",entry.getKey().getImgname()); - img.setImgurl(entry.getKey().getImgurl());//图片链接 - } - jsonArray.add(jsonObject); - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0); - } else { - img.setUserid(u.getId());//用户id - } - img.setSizes((entry.getValue()) / 1024); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(0); - userService.insertimg(img); - long etime = System.currentTimeMillis(); - - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - } - }else{ - jsonObject.put("imgurls",-5);//可用空间不足 + jsonObject.put("imgurls",config.getDomain()+"/links/"+entry.getKey().getImgurl()); + jsonObject.put("imgnames",entry.getKey().getImgname()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 } }else{ - jsonObject.put("imgurls",-1); + jsonObject.put("imgurls",entry.getKey().getImgurl()); + jsonObject.put("imgnames",entry.getKey().getImgname()); + img.setImgurl(entry.getKey().getImgurl());//图片链接 } - - //开辟新进程鉴黄。现在已经改成定时器 - //查询鉴黄功能是否启动,1为启用 -// Imgreview imgreview = imgreviewService.selectByPrimaryKey(1); -// if (imgreview.getUsing() == 1) { -// //上传完成后开辟新的线程进行图片鉴黄。 -// JianHuangThread thread = new JianHuangThread(imgreviewService, key, u, m); -// thread.start(); -// } - System.out.println(jsonArray.toString()); + jsonArray.add(jsonObject); + img.setUpdatetime(df.format(new Date())); + img.setSource(key.getStorageType()); + img.setUserid(u == null?0:u.getId()); + img.setSizes((entry.getValue()) / 1024); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setImgtype(setday>0?1:0); + userService.insertimg(img); + long etime = System.currentTimeMillis(); + Print.Normal("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + } return jsonObject.toString(); } - - //根据网络图片url上传 @PostMapping(value = "/upurlimg") @ResponseBody - public String upurlimg(HttpSession session, String imgurl, HttpServletRequest request,Integer setday) throws Exception { + public String upurlimg(HttpSession session, String imgurl, HttpServletRequest request,Integer setday,String upurlk) throws Exception { Config config = configService.getSourceype();//查询当前系统使用的存储源类型。 UploadConfig uploadConfig = uploadConfigService.getUpdateConfig(); User u = (User) session.getAttribute("user"); - Integer usermemory =0; Integer memory =0; Integer Sourcekey=0; + String userpath = "tourist"; if(u==null){ Sourcekey = GetCurrentSource.GetSource(null); memory = uploadConfig.getVisitormemory(); usermemory= imgService.getusermemory(0); if(usermemory==null){usermemory = 0;} }else{ + userpath = u.getUsername(); Sourcekey = GetCurrentSource.GetSource(u.getId()); memory = userService.getUsers(u.getEmail()).getMemory(); usermemory= imgService.getusermemory(u.getId()); if(usermemory==null){usermemory = 0;} } - //Integer Sourcekey = GetCurrentSource.GetSource(u.getId()); - String userpath = "tourist"; if(uploadConfig.getUrltype()==2){ java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd"); userpath = dateFormat.format(new Date()); - }else{if (u != null) { userpath = u.getUsername();}} + } JSONArray jsonArray = new JSONArray(); - + //判断非法调用 + if(Integer.parseInt(Base64Encryption.decryptBASE64(upurlk))!=updatekey){ + jsonArray.add(-403);//非法调用 + return jsonArray.toString(); + } Keys key = keysService.selectKeys(Sourcekey); long imgsize = ImgUrlUtil.getFileLength(imgurl); Integer youke = uploadConfig.getFilesizetourists(); Integer yonghu = uploadConfig.getFilesizeuser(); String uuid= UUID.randomUUID().toString().replace("-", ""); Boolean bo =false; - if(Sourcekey==5){ - bo =true; - }else{bo = StringUtils.doNull(Sourcekey,key);//判断对象是否有空值 - } -// //容量判断 -// Integer usermemory =0; -// Integer memory =0; - if(u==null){ - memory = uploadConfig.getVisitormemory(); - usermemory= imgService.getusermemory(0); - if(usermemory==null){usermemory = 0;} - }else{ - memory = userService.getUsers(u.getEmail()).getMemory(); - usermemory= imgService.getusermemory(u.getId()); - if(usermemory==null){usermemory = 0;} + bo = Sourcekey==5?true:StringUtils.doNull(Sourcekey,key); + if(!bo){ + jsonArray.add(-1);//存储源不完整 + return jsonArray.toString(); } //先判断对象存储key是不是null Print.warning("上传地址是:"+request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); - if(bo){ - if(usermemory/1024=memory) { + jsonArray.add(-5); + return jsonArray.toString(); + } long stime = System.currentTimeMillis(); //判断是会员还是游客 if(u!=null){ //判断文件大小 - if(imgsize>0 && imgsize<=(yonghu*1024*1024)){ - try{ - boolean bl =ImgUrlUtil.downLoadFromUrl(imgurl, - uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); - if(bl==true){ - FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - byte[] b = new byte[3]; - is.read(b, 0, b.length); - String xxx = ImgUrlUtil.bytesToHexString(b); - xxx = xxx.toUpperCase(); - System.out.println("头文件是:" + xxx); - String ooo = TypeDict.checkType(xxx); - System.out.println("后缀名是:" + ooo); - if(is!=null){ - is.close(); - } - //判断文件头是否是图片 - if(!ooo.equals("0000")){ - Map map = new HashMap<>(); - map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - Map m = null; - if(key.getStorageType()==1){ - m = nOSImageupload.Imageupload(null, userpath,map,setday); - }else if (key.getStorageType()==2){ - m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); - }else if(key.getStorageType()==3){ - m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); - }else if(key.getStorageType()==4){ - m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); - }else if(key.getStorageType()==5){ - m = LocUpdateImg.ImageuploadLOC(null,userpath,map,setday); - }else if(key.getStorageType()==6){ - m = cosImageupload.ImageuploadCOS(null,userpath,map,setday); - }else if(key.getStorageType()==7){ - m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); - } - else{ - System.err.println("未获取到对象存储参数,上传失败。"); - } - Images img = new Images(); - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); - String times = df.format(new Date()); - System.out.println("上传图片的时间是:"+times); - for (Map.Entry entry : m.entrySet()) { - if(key.getStorageType()==5){ - if(config.getDomain()!=null){ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 - }else{ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 - } - }else{ - jsonArray.add(entry.getKey().getImgurl()); - img.setImgurl(entry.getKey().getImgurl()); - } - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0);//用户id - } else { - img.setUserid(u.getId());//用户id - } - img.setSizes((entry.getValue())); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(0); - userService.insertimg(img); - long etime = System.currentTimeMillis(); - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - } - }else{ - jsonArray.add(-3); - } - } - }catch (Exception e) { - // TODO: handle exception - Print.warning(e.toString()); - jsonArray.add(-4); - } - }else{ + if(imgsize>0 && imgsize>=(yonghu*1024*1024)) { //文件过大 jsonArray.add(-2); + return jsonArray.toString(); + } + try{ + boolean bl =ImgUrlUtil.downLoadFromUrl(imgurl, + uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bl==true){ + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + byte[] b = new byte[3]; + is.read(b, 0, b.length); + String xxx = ImgUrlUtil.bytesToHexString(b); + xxx = xxx.toUpperCase(); + if(is!=null){is.close();} + //判断文件头是否是图片 + if(TypeDict.checkType(xxx).equals("0000")) { + jsonArray.add(-3);//不是图片格式 + return jsonArray.toString(); + } + Map map = new HashMap<>(); + map.put(TypeDict.checkType(xxx), request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + Map m = null; + m = GetSource.storageSource(key.getStorageType(), null, userpath,map,setday); + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:"+times); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 + }else{ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + } + }else{ + jsonArray.add(entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl()); + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + img.setUserid(u == null?0:u.getId()); + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + //img.setAbnormal(Sentence.getIPs()); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + if(setday>0){img.setImgtype(1);} + else{img.setImgtype(0);} + userService.insertimg(img); + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + } + } + }catch (Exception e) { + Print.warning(e.toString()); + jsonArray.add(-4); } }else{ - if(imgsize>0 && imgsize<=(youke*1024*1024)){ - try{ - boolean bl = ImgUrlUtil.downLoadFromUrl(imgurl, - uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); - if(bl==true){ - FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - byte[] b = new byte[3]; - is.read(b, 0, b.length); - String xxx = ImgUrlUtil.bytesToHexString(b); - xxx = xxx.toUpperCase(); - //System.out.println("头文件是:" + xxx); - String ooo = TypeDict.checkType(xxx); - //System.out.println("后缀名是:" + ooo); - if(is!=null){ - is.close(); - } - //判断文件头是否是图片 - if(!xxx.equals("0000")){ - Map map = new HashMap<>(); - map.put(ooo, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); - Map m = null; - if(key.getStorageType()==1){ - m = nOSImageupload.Imageupload(null, userpath,map,setday); - }else if (key.getStorageType()==2){ - m = ossImageupload.ImageuploadOSS(null, userpath,map,setday); - }else if(key.getStorageType()==3){ - m = ussImageupload.ImageuploadUSS(null, userpath,map,setday); - }else if(key.getStorageType()==4){ - m = kodoImageupload.ImageuploadKODO(null, userpath,map,setday); - }else if(key.getStorageType()==5){ - m =LocUpdateImg.ImageuploadLOC(null,userpath, map,setday); - }else if(key.getStorageType()==6){ - m =cosImageupload.ImageuploadCOS(null,userpath, map,setday); - }else if(key.getStorageType()==7){ - m = ftpImageupload.ImageuploadFTP(null,userpath,map,setday); - } - else{ - System.err.println("未获取到对象存储参数,上传失败。"); - } - Images img = new Images(); - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); - String times = df.format(new Date()); - System.out.println("上传图片的时间是:"+times); - for (Map.Entry entry : m.entrySet()) { - if(key.getStorageType()==5){ - if(config.getDomain()!=null){ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 - }else{ - jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); - img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 - } - }else{ - jsonArray.add(entry.getKey().getImgurl()); - } - //img.setImgurl(entry.getKey());//图片链接 - img.setUpdatetime(times); - img.setSource(key.getStorageType()); - if (u == null) { - img.setUserid(0);//用户id - } else { - img.setUserid(u.getId());//用户id - } - img.setSizes((entry.getValue())); - img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); - img.setAbnormal(0); - userService.insertimg(img); - long etime = System.currentTimeMillis(); - System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); - } - }else{ - jsonArray.add(-3); - } - } - }catch (Exception e) { - // TODO: handle exception - Print.warning(e.toString()); - jsonArray.add(-4); - } - }else{ + if(imgsize>0 && imgsize>=(youke*1024*1024)){ //文件过大 jsonArray.add(-2); + return jsonArray.toString(); + } + try{ + boolean bl = ImgUrlUtil.downLoadFromUrl(imgurl, + uuid, request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"); + if(bl==true){ + FileInputStream is = new FileInputStream(request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + byte[] b = new byte[3]; + is.read(b, 0, b.length); + String xxx = ImgUrlUtil.bytesToHexString(b); + xxx = xxx.toUpperCase(); + if(is!=null){is.close(); } + //判断文件头是否是图片 + if(xxx.equals("0000")) { + jsonArray.add(-3); + return jsonArray.toString(); + } + Map map = new HashMap<>(); + map.put(TypeDict.checkType(xxx), request.getSession().getServletContext().getRealPath("/")+"/hellohaotmp/"+uuid); + + Map m = null; + m = GetSource.storageSource(key.getStorageType(), null, userpath,map,setday); + Images img = new Images(); + SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + String times = df.format(new Date()); + System.out.println("上传图片的时间是:"+times); + for (Map.Entry entry : m.entrySet()) { + if(key.getStorageType()==5){ + if(config.getDomain()!=null){ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl(config.getDomain()+"/links/"+entry.getKey().getImgurl());//图片链接 + }else{ + jsonArray.add(config.getDomain()+"/links/"+entry.getKey().getImgurl()); + img.setImgurl("http://"+IPPortUtil.getLocalIP()+":"+IPPortUtil.getLocalPort()+"/links/"+entry.getKey().getImgurl());//图片链接 + } + }else{ + jsonArray.add(entry.getKey().getImgurl()); + img.setImgurl(entry.getKey().getImgurl());//图片链接 + } + img.setUpdatetime(times); + img.setSource(key.getStorageType()); + img.setUserid(u == null?0:u.getId()); + img.setSizes((entry.getValue())); + img.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + img.setImgtype(setday>0?1:0); + userService.insertimg(img); + long etime = System.currentTimeMillis(); + System.out.println("上传图片所用时长:" + String.valueOf(etime - stime) + "ms"); + //多线程插入ip值 + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(SetText.getSubString(entry.getKey().getImgurl(), key.getRequestAddress() + "/", "")); + Thread thread = new Thread(getIPS); + thread.start(); + } + } + }catch (Exception e) { + Print.warning(e.toString()); + jsonArray.add(-4); } } - }else{ - jsonArray.add(-5); - } - }else{ - jsonArray.add(-1); - } + return jsonArray.toString(); /** * 错误返回值含义: diff --git a/src/main/java/cn/hellohao/dao/ImgMapper.java b/src/main/java/cn/hellohao/dao/ImgMapper.java index 4c7051d..cae5602 100644 --- a/src/main/java/cn/hellohao/dao/ImgMapper.java +++ b/src/main/java/cn/hellohao/dao/ImgMapper.java @@ -20,7 +20,7 @@ public interface ImgMapper { Integer counts(@Param("userid") Integer userid); - Integer setabnormal(@Param("imgname") String imgname); + Integer setabnormal(@Param("imgname") String imgname,@Param("abnormal") String abnormal); Integer deleimgname(@Param("imgname") String imgname); Integer deleall(@Param("id") Integer id); diff --git a/src/main/java/cn/hellohao/pojo/Config.java b/src/main/java/cn/hellohao/pojo/Config.java index 11cb9c1..eea60d7 100644 --- a/src/main/java/cn/hellohao/pojo/Config.java +++ b/src/main/java/cn/hellohao/pojo/Config.java @@ -15,12 +15,13 @@ public class Config { private String background1; private String background2; private String sett; - + private String webms; + private String webkeywords; + private String webfavicons; public Config() { } - - public Config(Integer id, Integer sourcekey, Integer emails, String webname, String explain, String video, Integer backtype, String links, String notice, String baidu, String domain, String background1, String background2, String sett) { + public Config(Integer id, Integer sourcekey, Integer emails, String webname, String explain, String video, Integer backtype, String links, String notice, String baidu, String domain, String background1, String background2, String sett, String webms, String webkeywords, String webfavicons) { this.id = id; this.sourcekey = sourcekey; this.emails = emails; @@ -35,6 +36,9 @@ public class Config { this.background1 = background1; this.background2 = background2; this.sett = sett; + this.webms = webms; + this.webkeywords = webkeywords; + this.webfavicons = webfavicons; } public Integer getId() { @@ -148,4 +152,28 @@ public class Config { public void setSett(String sett) { this.sett = sett; } + + public String getWebms() { + return webms; + } + + public void setWebms(String webms) { + this.webms = webms; + } + + public String getWebkeywords() { + return webkeywords; + } + + public void setWebkeywords(String webkeywords) { + this.webkeywords = webkeywords; + } + + public String getWebfavicons() { + return webfavicons; + } + + public void setWebfavicons(String webfavicons) { + this.webfavicons = webfavicons; + } } diff --git a/src/main/java/cn/hellohao/pojo/Images.java b/src/main/java/cn/hellohao/pojo/Images.java index 7aff5c2..77a8ea6 100644 --- a/src/main/java/cn/hellohao/pojo/Images.java +++ b/src/main/java/cn/hellohao/pojo/Images.java @@ -12,8 +12,9 @@ public class Images { private String imgurl; private Integer userid; private Integer sizes = 0; - private Integer abnormal; + private String abnormal; private Integer source; + private Integer imgtype; private String updatetime; private String username; private Integer storageType; @@ -25,7 +26,7 @@ public class Images { super(); } - public Images(Integer id, String imgname, String imgurl, Integer userid, Integer sizes, Integer abnormal, Integer source, String updatetime, String username, Integer storageType, String starttime, String stoptime) { + public Images(Integer id, String imgname, String imgurl, Integer userid, Integer sizes, String abnormal, Integer source, Integer imgtype, String updatetime, String username, Integer storageType, String starttime, String stoptime) { this.id = id; this.imgname = imgname; this.imgurl = imgurl; @@ -33,6 +34,7 @@ public class Images { this.sizes = sizes; this.abnormal = abnormal; this.source = source; + this.imgtype = imgtype; this.updatetime = updatetime; this.username = username; this.storageType = storageType; @@ -80,11 +82,11 @@ public class Images { this.sizes = sizes; } - public Integer getAbnormal() { + public String getAbnormal() { return abnormal; } - public void setAbnormal(Integer abnormal) { + public void setAbnormal(String abnormal) { this.abnormal = abnormal; } @@ -96,6 +98,14 @@ public class Images { this.source = source; } + public Integer getImgtype() { + return imgtype; + } + + public void setImgtype(Integer imgtype) { + this.imgtype = imgtype; + } + public String getUpdatetime() { return updatetime; } @@ -135,11 +145,6 @@ public class Images { public void setStoptime(String stoptime) { this.stoptime = stoptime; } -// @Mapper -// public static interface ConfigMapper { -// Config getSourceype(); -// Integer setSourceype(@Param("sourcekey") Integer sourcekey); -// } } diff --git a/src/main/java/cn/hellohao/service/ImgService.java b/src/main/java/cn/hellohao/service/ImgService.java index 227e6f2..843d518 100644 --- a/src/main/java/cn/hellohao/service/ImgService.java +++ b/src/main/java/cn/hellohao/service/ImgService.java @@ -18,7 +18,7 @@ public interface ImgService { Integer counts(Integer userid); - Integer setabnormal(String imgname); + Integer setabnormal(String imgname,String abnormal); Integer deleimgname(String imgname); diff --git a/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java b/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java index ada0c54..9e8e3b1 100644 --- a/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java +++ b/src/main/java/cn/hellohao/service/impl/ImgServiceImpl.java @@ -186,8 +186,8 @@ public class ImgServiceImpl implements ImgService { } @Override - public Integer setabnormal(String imgname) { - return imgMapper.setabnormal(imgname); + public Integer setabnormal(String imgname,String abnormal) { + return imgMapper.setabnormal(imgname,abnormal); } @Override diff --git a/src/main/java/cn/hellohao/service/impl/KODOImageupload.java b/src/main/java/cn/hellohao/service/impl/KODOImageupload.java index 165ea75..966e141 100644 --- a/src/main/java/cn/hellohao/service/impl/KODOImageupload.java +++ b/src/main/java/cn/hellohao/service/impl/KODOImageupload.java @@ -49,7 +49,6 @@ public class KODOImageupload { //ossClient.putObject(key.getBucketname(), username + "/" + uuid+times + "." + entry.getKey(),file,meta); try { Response response = uploadManager.put(file,username + "/" + uuid+times + "." + entry.getKey(),upToken); - System.out.println(response); //解析上传成功的结果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); ReturnImage returnImage = new ReturnImage(); diff --git a/src/main/java/cn/hellohao/utils/AfterServiceStarted.java b/src/main/java/cn/hellohao/utils/AfterServiceStarted.java index 8647d8e..49d91a4 100644 --- a/src/main/java/cn/hellohao/utils/AfterServiceStarted.java +++ b/src/main/java/cn/hellohao/utils/AfterServiceStarted.java @@ -1,5 +1,6 @@ package cn.hellohao.utils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -12,6 +13,12 @@ public class AfterServiceStarted implements ApplicationRunner { /** * 会在服务启动完成后立即执行 */ + @Value("${spring.datasource.url}") + private String url; + @Value("${spring.datasource.username}") + private String userName; + @Value("${spring.datasource.password}") + private String userPassword; @Override public void run(ApplicationArguments args) throws Exception { Print.Normal("______________________________________________"); @@ -20,7 +27,8 @@ public class AfterServiceStarted implements ApplicationRunner { // Print.Normal(" is OK! Open http://your ip:port "); // Print.Normal("______________________________________________"); //getLinuxLocalIp(); - + //System.out.println("开始执行数据库~~"); + // JDBCTool.caozuo(url,userName,userPassword); } diff --git a/src/main/java/cn/hellohao/utils/DateUtils.java b/src/main/java/cn/hellohao/utils/DateUtils.java index e8226db..42bff3e 100644 --- a/src/main/java/cn/hellohao/utils/DateUtils.java +++ b/src/main/java/cn/hellohao/utils/DateUtils.java @@ -5,7 +5,7 @@ import java.util.Calendar; import java.util.Date; /** - * @author Tiansh + * @author Hellohao * @version 1.0 * @date 2019/9/20 16:27 */ diff --git a/src/main/java/cn/hellohao/utils/GetIPS.java b/src/main/java/cn/hellohao/utils/GetIPS.java new file mode 100644 index 0000000..e0ac066 --- /dev/null +++ b/src/main/java/cn/hellohao/utils/GetIPS.java @@ -0,0 +1,31 @@ +package cn.hellohao.utils; + +import cn.hellohao.service.impl.ImgServiceImpl; +import cn.hellohao.service.impl.ImgreviewServiceImpl; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019/11/6 17:35 + */ +public class GetIPS implements Runnable { + private String imgname ; + + + public void setImgname(String imgname) { + this.imgname = imgname; + } + + @Override + public void run() { + ImgServiceImpl imgService = SpringContextHolder.getBean(ImgServiceImpl.class); + imgService.setabnormal(imgname,Sentence.getIPs()); + } + + public static void runxc(String imgnames){ + GetIPS getIPS = new GetIPS(); + getIPS.setImgname(imgnames); + Thread thread = new Thread(getIPS); + thread.start(); + } +} diff --git a/src/main/java/cn/hellohao/utils/GetSource.java b/src/main/java/cn/hellohao/utils/GetSource.java new file mode 100644 index 0000000..224fd27 --- /dev/null +++ b/src/main/java/cn/hellohao/utils/GetSource.java @@ -0,0 +1,54 @@ +package cn.hellohao.utils; + +import cn.hellohao.exception.StorageSourceInitException; +import cn.hellohao.pojo.ReturnImage; +import cn.hellohao.service.impl.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; + +/** + * @author Hellohao + * @version 1.0 + * @date 2019/11/7 17:12 + */ +//通过type判断是哪一个存储源 +public class GetSource { + public static Map storageSource(Integer type, Map fileMap, String userpath, + Map filename,Integer setday){ + NOSImageupload nosImageupload = SpringContextHolder.getBean(NOSImageupload.class); + OSSImageupload ossImageupload = SpringContextHolder.getBean(OSSImageupload.class); + USSImageupload ussImageupload = SpringContextHolder.getBean(USSImageupload.class); + KODOImageupload kodoImageupload = SpringContextHolder.getBean(KODOImageupload.class); + COSImageupload cosImageupload = SpringContextHolder.getBean(COSImageupload.class); + FTPImageupload ftpImageupload = SpringContextHolder.getBean(FTPImageupload.class); + + Map m = null; + try { + if(type==1){ + m = nosImageupload.Imageupload(fileMap, userpath,filename,setday); + }else if (type==2){ + m = ossImageupload.ImageuploadOSS(fileMap, userpath,filename,setday); + }else if(type==3){ + m = ussImageupload.ImageuploadUSS(fileMap, userpath,filename,setday); + }else if(type==4){ + m = kodoImageupload.ImageuploadKODO(fileMap, userpath,filename,setday); + }else if(type==5){ + m = LocUpdateImg.ImageuploadLOC(fileMap, userpath,filename,setday); + }else if(type==6){ + m = cosImageupload.ImageuploadCOS(fileMap, userpath,filename,setday); + }else if(type==7){ + m = ftpImageupload.ImageuploadFTP(fileMap, userpath,filename,setday); + } + else{ + new StorageSourceInitException("GetSource类捕捉异常:未找到存储源"); + } + } catch (Exception e) { + new StorageSourceInitException("GetSource类捕捉异常:",e); + e.printStackTrace(); + } + return m; + } + + +} diff --git a/src/main/java/cn/hellohao/utils/ImageReview.java b/src/main/java/cn/hellohao/utils/ImageReview.java index ebe4f48..99044e9 100644 --- a/src/main/java/cn/hellohao/utils/ImageReview.java +++ b/src/main/java/cn/hellohao/utils/ImageReview.java @@ -26,9 +26,6 @@ public class ImageReview { client.setSocketTimeoutInMillis(60000); } - public static void main(String[] args) { - - } //开始调用鉴黄。 public static void imgJB(Map imgmap, String requestAddress, Keys key, Imgreview imgreview) { ImgServiceImpl imgService = SpringContextHolder.getBean(ImgServiceImpl.class); diff --git a/src/main/java/cn/hellohao/utils/Sentence.java b/src/main/java/cn/hellohao/utils/Sentence.java index 23d93ab..f67679d 100644 --- a/src/main/java/cn/hellohao/utils/Sentence.java +++ b/src/main/java/cn/hellohao/utils/Sentence.java @@ -1,5 +1,7 @@ package cn.hellohao.utils; +import com.alibaba.fastjson.JSONObject; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -19,22 +21,6 @@ public class Sentence { */ public static String getURLContent() { -// String str = ""; -// try { -// URL url = new URL("https://v1.hitokoto.cn/"); -// BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); -// String line; -// while ((line = reader.readLine()) != null) { -// str += line; -// } -// reader.close(); -// } catch (MalformedURLException e) { -// e.printStackTrace(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// return str; - String result = ""; //String urlName = "https://v1.hitokoto.cn/"; String urlName = "http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"; @@ -61,4 +47,26 @@ public class Sentence { return result; } + //获取真实ip + public static String getIPs(){ + String str = ""; + try { + URL url = new URL("https://api.asilu.com/geo/"); + BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); + String line; + while ((line = reader.readLine()) != null) { + str += line; + } + reader.close(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } +//所有数据在str + JSONObject ips = JSONObject.parseObject(str); + return ips.get("ip").toString(); + } + + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ac579a5..430b5d7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,7 +3,7 @@ spring.datasource.username=root #ݿtest spring.datasource.password=root #ݿӵַ -spring.datasource.url=jdbc:mysql://127.0.0.1:3306/picturebed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 +spring.datasource.url=jdbc:mysql://localhost:3306/picturebed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 #˿ server.port=8088 #ڱʽ ·ʽΪÿߵִ @@ -24,7 +24,7 @@ multipart.maxFileSize=10240KB multipart.maxRequestSize=10240KB spring.thymeleaf.mode = LEGACYHTML5 spring.http.multipart.location=/data/upload_tmp -systemupdate=2019-10-08 +systemupdate=2019-11-08 diff --git a/src/main/resources/mapper/ConfigMapper.xml b/src/main/resources/mapper/ConfigMapper.xml index c8b388c..3ad860c 100644 --- a/src/main/resources/mapper/ConfigMapper.xml +++ b/src/main/resources/mapper/ConfigMapper.xml @@ -48,6 +48,15 @@ `sett` = #{sett}, + + `webms` = #{webms}, + + + `webkeywords` = #{webkeywords}, + + + `webfavicons` = #{webfavicons}, + where id=1 diff --git a/src/main/resources/mapper/ImgMapper.xml b/src/main/resources/mapper/ImgMapper.xml index 9c1f2ca..7ccfdb4 100644 --- a/src/main/resources/mapper/ImgMapper.xml +++ b/src/main/resources/mapper/ImgMapper.xml @@ -12,7 +12,8 @@ a.updatetime, a.sizes, a.abnormal, - a.source + a.source, + a.imgtype FROM imgdata a LEFT JOIN user b ON a.userid = b.id @@ -58,9 +59,9 @@ - + - UPDATE imgdata set abnormal=1 where imgname=#{imgname} + UPDATE imgdata set abnormal=#{abnormal} where imgname=#{imgname} diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 5352329..83f1aff 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -81,8 +81,8 @@ - INSERT INTO imgdata (id, imgname, imgurl, userid, updatetime,sizes,abnormal,source) - VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},null,#{source}) + INSERT INTO imgdata (id, imgname, imgurl, userid, updatetime,sizes,abnormal,source,imgtype) + VALUES (NULL, #{imgname}, #{imgurl}, #{userid}, #{updatetime},#{sizes},#{abnormal},#{source},#{imgtype}) diff --git a/src/main/resources/static/img/ds.jpg b/src/main/resources/static/img/ds.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a60c8789d8238cb3571deeab1bab2fc893b75e0 GIT binary patch literal 116049 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

$DFmU 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/webuploade/js/upload.js b/src/main/resources/static/webuploade/js/upload.js index d1427a4..1366b33 100644 --- a/src/main/resources/static/webuploade/js/upload.js +++ b/src/main/resources/static/webuploade/js/upload.js @@ -148,7 +148,8 @@ label: '点击选择文件' }, formData: { - setday:isday + setday:isday, + upurlk:qq }, dnd: '#wrapper', paste: '#wrapper', @@ -219,7 +220,17 @@ layer = layui.layer; layer.msg("上传失败,可用空间不足", {icon: 2}); }); - } else{ + } else if(response.imgurls==403){ + layui.use('layer', function () { + layer = layui.layer; + layer.msg("非法调用,请刷新页面后重试", {icon: 2}); + }); + }else if(response.imgurls==-6){ + layui.use('layer', function () { + layer = layui.layer; + layer.msg("图片超出大小。", {icon: 2}); + }); + }else{ arr_url += response.imgurls + '\r\n'; arr_markdown += '!['+response.imgnames+'](' + response.imgurls + ')\r\n'; arr_html += ''+response.imgnames+' \r\n'; diff --git a/src/main/resources/templates/admin/about.html b/src/main/resources/templates/admin/about.html index a5266ec..f9b1f6c 100644 --- a/src/main/resources/templates/admin/about.html +++ b/src/main/resources/templates/admin/about.html @@ -25,15 +25,16 @@


 Guthub开源:https://github.com/Hello-hao/Tbed


-

开发者交流群:32452345342

+

开发者交流群:864800972


     检查更新


 支持一下作者吧:


- +

diff --git a/src/main/resources/templates/admin/table.html b/src/main/resources/templates/admin/table.html index 02006a5..fb47296 100644 --- a/src/main/resources/templates/admin/table.html +++ b/src/main/resources/templates/admin/table.html @@ -36,6 +36,9 @@
@@ -241,18 +247,35 @@
- - - - - - - - -

更多功能陆续开放...

+
+
+ +
+ + 多个关键词用(英文)“ , ”隔开 +
+
+
+
+
+ +
+ + 填写站点(favicon)图标的,大小控制在64×64以内,需是.ico格式的链接 +
+
+
+
+
+ +
+ + 添加网站统计的JS代码,不需要要添加<script>标签</script> +
+
+

- - + 保存 @@ -363,12 +386,16 @@ var background1 = $("#background1").val(); var background2 = $("#background2").val(); var sett = $('#sett input[name="settweb"]:checked ').val(); + var webms = $("#webms").val(); + var webkeywords = $("#webkeywords").val(); + var webfavicons = $("#webfavicons").val(); if (webname != "" && domain!="" ) { $.ajax({ type: "POST", url: "/admin/root/updateconfig", dataType: "json", - data: {webname: webname, explain: explain, video: video,backtype:backtype,links:links,notice:notice,domain:domain,background1:background1,background2:background2,sett:sett}, + data: {webname: webname, explain: explain, video: video,backtype:backtype,links:links,notice:notice, + domain:domain,background1:background1,background2:background2,sett:sett,webms:webms,webkeywords:webkeywords,webfavicons:webfavicons}, success: function (data) { var vals = Number(data); if (vals > 0) { diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 7864a54..d31ab7b 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -1,19 +1,15 @@ - - - - - - - - - - - + + + + + + + @@ -32,45 +28,51 @@ - - -
-
- -
LOADING
- - - -
@@ -111,10 +140,10 @@
  • 登录 
  • 注册 
  • - - - - +
  • GitHub
  • +
  • 作者
  • @@ -125,38 +154,24 @@
    - -
    -
    -
    -
    - -
    -

    - 立即上传 - - - + + 客户端

    纯粹免费的图片驿站

    - - -

    Hellohao Figure bed:support several mainstream object storage, CDN acceleration is more stable. Technology constantly updated, we will always move forward on the road ahead.

    - -
    @@ -165,32 +180,25 @@
    0
    - -
    hours
    0
    - -
    mins
    0
    -
    secs
    0
    -
    -
    @@ -204,11 +212,8 @@
    - - -
    • @@ -217,15 +222,10 @@
    -
    - -
    -
    -
    @@ -255,17 +255,14 @@
    -
    -
    -
    @@ -285,15 +282,11 @@
    -
    -
    - - - +