diff --git a/.gitignore b/.gitignore index 549e00a..052f961 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ build/ ### VS Code ### .vscode/ +/src/main/resources/static/qr/ diff --git a/src/main/java/com/lovenav/LoveNavApplication.java b/src/main/java/com/lovenav/LoveNavApplication.java index 75098fa..41f55e0 100644 --- a/src/main/java/com/lovenav/LoveNavApplication.java +++ b/src/main/java/com/lovenav/LoveNavApplication.java @@ -1,13 +1,19 @@ package com.lovenav; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration; -@SpringBootApplication +@SpringBootApplication(exclude = {MultipartAutoConfiguration.class}) +@MapperScan({"com.lovenav.dao"}) public class LoveNavApplication { - public static void main(String[] args) { + public static void main(String[] args) { + + SpringApplication.run(LoveNavApplication.class, args); + } } diff --git a/src/main/java/com/lovenav/configuration/UploadConfig.java b/src/main/java/com/lovenav/configuration/UploadConfig.java new file mode 100644 index 0000000..86e440f --- /dev/null +++ b/src/main/java/com/lovenav/configuration/UploadConfig.java @@ -0,0 +1,24 @@ +package com.lovenav.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.multipart.MultipartResolver; +import org.springframework.web.multipart.commons.CommonsMultipartResolver; + + +@Configuration +public class UploadConfig { + //显示声明CommonsMultipartResolver为mutipartResolver + @Bean(name = "multipartResolver") + public MultipartResolver multipartResolver() { + CommonsMultipartResolver resolver = new CommonsMultipartResolver(); + resolver.setDefaultEncoding("UTF-8"); + //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 + resolver.setResolveLazily(true); + resolver.setMaxInMemorySize(40960); + //上传文件大小 5M 5*1024*1024 + resolver.setMaxUploadSize(5 * 1024 * 1024); + return resolver; + } + +} \ No newline at end of file diff --git a/src/main/java/com/lovenav/controller/AttachmentController.java b/src/main/java/com/lovenav/controller/AttachmentController.java index 4dcc156..f12239a 100644 --- a/src/main/java/com/lovenav/controller/AttachmentController.java +++ b/src/main/java/com/lovenav/controller/AttachmentController.java @@ -6,6 +6,7 @@ import com.lovenav.service.AttachmentService; import com.lovenav.service.ConfigService; import org.apache.catalina.core.ApplicationContext; import org.apache.commons.io.FileUtils; +import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.ui.Model; @@ -35,8 +36,8 @@ public class AttachmentController { //上传附件 @RequestMapping(value = "/uploadfile",method = RequestMethod.POST) - public HashMap uploadFile(MultipartFile multipartFile, String cate, Config config) throws IOException {//@RequestPart("photos") MultipartFile multipartFile - HashMap map=new HashMap<>(); + public HashMap uploadFile(MultipartFile multipartFile, String cate, Config config) throws IOException {//@RequestPart("photos") MultipartFile multipartFile + HashMap map=new HashMap<>(); if (multipartFile==null){ map.put("msg","文件不能为空!"); return map; @@ -45,9 +46,10 @@ public class AttachmentController { if (config1==null){ map=attachmentService.upload(multipartFile,cate); // out.println(map.get("id")); - config.setValue(map.get("id")); + config.setValue(map.get("id").toString()); config.setType("image"); map.put("msg",configService.addConfig(config)); + map.put("code",200); }else { out.println(config1.getValue()); configService.updateConfig(config1); @@ -88,7 +90,14 @@ public class AttachmentController { headers.setContentType(MediaType.IMAGE_PNG); }else if (attachment.getSuffix().replace(".","").equals("jpeg")){ headers.setContentType(MediaType.IMAGE_JPEG); - }else{ + } + else if (attachment.getSuffix().replace(".","").equals("jpg")){ + headers.setContentType(MediaType.IMAGE_JPEG); + } + else if (attachment.getSuffix().replace(".","").equals("gif")){ + headers.setContentType(MediaType.IMAGE_GIF); + } + else{ bytes= "没有该文件!".getBytes(); headers.setContentType(MediaType.APPLICATION_JSON); return new ResponseEntity(bytes, headers, HttpStatus.NOT_FOUND); diff --git a/src/main/java/com/lovenav/controller/BannersController.java b/src/main/java/com/lovenav/controller/BannersController.java index 5c61041..9dceb8b 100644 --- a/src/main/java/com/lovenav/controller/BannersController.java +++ b/src/main/java/com/lovenav/controller/BannersController.java @@ -13,27 +13,28 @@ import org.springframework.web.bind.annotation.RestController; public class BannersController { @Autowired private BannersService bannersService; -// 跳转链接 -@RequestMapping(method = RequestMethod.GET, value = "/jump_url") - public String jump(int id){ - return bannersService.Jump_url(id); + + // 跳转链接 + @RequestMapping(method = RequestMethod.GET, value = "/jump_url") + public String jump(int id) { + return bannersService.Jump_url(id); } -// 添加banner -@RequestMapping(method = RequestMethod.POST, value = "/add_banner") - public String add(@RequestBody Banners banners){ - return bannersService.Add_banner(banners); + // 添加banner + @RequestMapping(method = RequestMethod.POST, value = "/add_banner") + public String add(@RequestBody Banners banners) { + return bannersService.Add_banner(banners); } -// 删除banner -@RequestMapping(method = RequestMethod.GET, value = "/delete_url") - public String delete(int id){ - return bannersService.Delete_banner(id); + // 删除banner + @RequestMapping(method = RequestMethod.GET, value = "/delete_url") + public String delete(int id) { + return bannersService.Delete_banner(id); } -// 首页显示banner -@RequestMapping(method = RequestMethod.GET, value = "/view_banner") - public String view(){ - return bannersService.View_banner(); + // 首页显示banner + @RequestMapping(method = RequestMethod.GET, value = "/view_banner") + public String view() { + return bannersService.View_banner(); } } diff --git a/src/main/java/com/lovenav/controller/QRCodeController.java b/src/main/java/com/lovenav/controller/QRCodeController.java index 8960af3..792aa24 100644 --- a/src/main/java/com/lovenav/controller/QRCodeController.java +++ b/src/main/java/com/lovenav/controller/QRCodeController.java @@ -19,7 +19,7 @@ public class QRCodeController { private QRCService qrcService; @RequestMapping(method = RequestMethod.POST, value = "/qrc_return") - public String QRCode(@RequestBody int url_id) throws Exception { + public String QRCode(Integer url_id) throws Exception { return qrcService.QR(url_id); } } \ No newline at end of file diff --git a/src/main/java/com/lovenav/controller/SearchController.java b/src/main/java/com/lovenav/controller/SearchController.java index 61b85b4..a5e821b 100644 --- a/src/main/java/com/lovenav/controller/SearchController.java +++ b/src/main/java/com/lovenav/controller/SearchController.java @@ -33,7 +33,7 @@ public class SearchController { //非法敏感词汇判断 SensitiveFilter filter = SensitiveFilter.getInstance(); String s = filter.replaceSensitiveWord(searchKey, 1, placeholder); - System.out.println(s); + //System.out.println(s); int n = filter.CheckSensitiveWord(searchKey,0,2); //存在非法字符 if(n > 0){ diff --git a/src/main/java/com/lovenav/controller/UrlAndCateController.java b/src/main/java/com/lovenav/controller/UrlAndCateController.java index 3c9e0af..67b8eb0 100644 --- a/src/main/java/com/lovenav/controller/UrlAndCateController.java +++ b/src/main/java/com/lovenav/controller/UrlAndCateController.java @@ -80,7 +80,7 @@ public class UrlAndCateController { JsonNode sonNode = rootNode.get(i); if(String.valueOf(sonNode.get("type")).equals("\"folder\"")){ String icon = String.valueOf(sonNode.get("icon")); - System.out.println(icon.length()); + //System.out.println(icon.length()); if (icon.length() == 2) icon ="https://imgbed.landaiqing.space/img/1/2023/12/25/1_6588644cb1f03_1703437387965_20231225.webp"; else{ icon=icon.substring(1,icon.length()-1); @@ -202,7 +202,7 @@ public class UrlAndCateController { } Collections.sort(integers); for (Integer str : integers) { - System.out.println(str); + //System.out.println(str); UrlCateList urlCateList =urlCateListService.selectByPrimaryKey(Integer.valueOf(str)); CateAndUrl cateAndUrl = new CateAndUrl(); cateAndUrl.setFloder("true"); @@ -222,7 +222,7 @@ public class UrlAndCateController { // cateAndUrlList.add(cateAndUrl); // } - System.out.println(cateAndUrlList); + //System.out.println(cateAndUrlList); List parentsList = new ArrayList<>(); //声明返回集合 List resultList = new ArrayList<>(); @@ -330,6 +330,8 @@ public class UrlAndCateController { * @throws IOException */ public HSSFWorkbook jsonToExcel(JSONArray jsonArray) throws IOException { + + Set keys = new HashSet<>(); // 创建HSSFWorkbook对象 HSSFWorkbook wb = new HSSFWorkbook(); @@ -353,10 +355,9 @@ public class UrlAndCateController { HSSFCell cell = row.createCell(0); String temp = jsonObjects.get(i).keySet().toString(); String target = temp.substring(1,temp.length()-1); - String target1 = temp.substring(2,temp.length()-2); - cell.setCellValue(target1); + cell.setCellValue(target); cell = row.createCell(1); - cell.setCellValue(jsonObjects.get(i).get(target).toString().substring(2,temp.length()-2)); + cell.setCellValue(jsonObjects.get(i).get(target).toString()); } return wb; @@ -481,7 +482,7 @@ public class UrlAndCateController { List ls=Arrays.asList(parentSet.toArray(new String[0])); Collections.sort(ls); for (String str : ls) { - System.out.println(str); + // System.out.println(str); UrlCateList urlCateList =urlCateListService.selectByPrimaryKey(Integer.valueOf(str)); CateAndUrl cateAndUrl = new CateAndUrl(); cateAndUrl.setFloder("true"); @@ -571,7 +572,7 @@ public class UrlAndCateController { cateAndUrlList.add(cateAndUrl); } - System.out.println(cateAndUrlList); + // System.out.println(cateAndUrlList); List parentsList = new ArrayList<>(); //声明返回集合 List resultList = new ArrayList<>(); diff --git a/src/main/java/com/lovenav/controller/UrlListController.java b/src/main/java/com/lovenav/controller/UrlListController.java index 64a8d15..c1fd025 100644 --- a/src/main/java/com/lovenav/controller/UrlListController.java +++ b/src/main/java/com/lovenav/controller/UrlListController.java @@ -35,7 +35,7 @@ public class UrlListController { UrlList urlList = urlListService.selectUrlListByUrlId(Long.valueOf(urlId)); String parentString = urlCateListService.selectUrListCateByUrlCateId(urlList.getCateId()); String [] parentList = parentString.split(","); - System.out.println(parentString); + //System.out.println(parentString); for(String parent : parentList) { if(parent.equals("0")){ @@ -72,7 +72,7 @@ public class UrlListController { flag = urlListService.insertUrlByUser(urlList); String parentString = urlCateListService.selectUrListCateByUrlCateId(urlList.getCateId()); String [] parentList = parentString.split(","); - System.out.println(parentString); + // System.out.println(parentString); for(String parent : parentList) { if(parent.equals("0")){ diff --git a/src/main/java/com/lovenav/controller/UserController.java b/src/main/java/com/lovenav/controller/UserController.java index 8f323a4..9a9787e 100644 --- a/src/main/java/com/lovenav/controller/UserController.java +++ b/src/main/java/com/lovenav/controller/UserController.java @@ -65,7 +65,7 @@ public class UserController { @Override public void run() { session.removeAttribute(user.getUserEmail()); - System.out.println(session.getAttribute(user.getUserEmail())); + // System.out.println(session.getAttribute(user.getUserEmail())); } },60, TimeUnit.SECONDS); return "发送验证码成功!"; @@ -79,8 +79,8 @@ public class UserController { if (!user.getActiveCode().equals((String) session.getAttribute(user.getUserEmail()))) { return "验证码不正确"; } - System.out.println(user.getUserLogin()); - System.out.println(user.getUserEmail()); + // System.out.println(user.getUserLogin()); + // System.out.println(user.getUserEmail()); // 用户注册之前根据用户名称查询该用户是否存在如果不存在的情况下才可以注册 如果存在的话就无法注册 User user1=userService.selectUserAlreadyExist(user); if (user1 != null) { @@ -118,7 +118,7 @@ public class UserController { String ip=IPutils.getIpAddress(request); - System.out.println(ip); + // System.out.println(ip); String locat= String.valueOf(IPutils.getLocation(ip)); User user1 = userService.userLogin(user); @@ -164,7 +164,7 @@ public class UserController { Map map=new HashMap<>(); User user1=userService.selectUserAlreadyExist(user); - System.out.println(user1); + // System.out.println(user1); if (user1==null){ map.put("msg","无此邮箱"); return map; diff --git a/src/main/java/com/lovenav/filter/UserInterceptor.java b/src/main/java/com/lovenav/filter/UserInterceptor.java index 88cf02f..7d66be8 100644 --- a/src/main/java/com/lovenav/filter/UserInterceptor.java +++ b/src/main/java/com/lovenav/filter/UserInterceptor.java @@ -40,7 +40,7 @@ public class UserInterceptor implements HandlerInterceptor { // 拦截每个请求 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws IOException { Map map=new HashMap<>(); - System.out.println("开始进入拦截器检验jwt头部是否含有Authorization方法!"); + //System.out.println("开始进入拦截器检验jwt头部是否含有Authorization方法!"); // 通过url得到token请求头是否包含Authorization response.setCharacterEncoding("UTF-8"); String jwt = request.getHeader("Authorization"); diff --git a/src/main/java/com/lovenav/service/AttachmentService.java b/src/main/java/com/lovenav/service/AttachmentService.java index 24907d3..f01dd2c 100644 --- a/src/main/java/com/lovenav/service/AttachmentService.java +++ b/src/main/java/com/lovenav/service/AttachmentService.java @@ -10,10 +10,10 @@ import java.util.HashMap; import java.util.Map; public interface AttachmentService { - HashMap upload(MultipartFile file,String cate) throws IOException; + HashMap upload(MultipartFile file,String cate) throws IOException; - public HashMapstoreFile(MultipartFile multipartFile,String cate) throws IOException; - public HashMapupdateFile(MultipartFile multipartFile,String cate,Config config) throws IOException; + public HashMapstoreFile(MultipartFile multipartFile,String cate) throws IOException; + public HashMapupdateFile(MultipartFile multipartFile,String cate,Config config) throws IOException; public Attachment selectAttachment(Long id); diff --git a/src/main/java/com/lovenav/service/QRCService.java b/src/main/java/com/lovenav/service/QRCService.java index ef2fc4b..8c32edc 100644 --- a/src/main/java/com/lovenav/service/QRCService.java +++ b/src/main/java/com/lovenav/service/QRCService.java @@ -1,7 +1,8 @@ package com.lovenav.service; import com.lovenav.entity.CollectIconList; +import org.springframework.web.bind.annotation.RequestBody; public interface QRCService { - public String QR(int url_id) throws Exception; + public String QR(@RequestBody Integer url_id) throws Exception; } diff --git a/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java index 7b2429c..2f8bb9c 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/AttachmentServiceImpl.java @@ -30,13 +30,13 @@ public class AttachmentServiceImpl implements AttachmentService { AttachmentDao attachmentDao; @Override - public HashMap upload(MultipartFile file,String cate) throws IOException { - HashMap map = storeFile(file,cate); + public HashMap upload(MultipartFile file,String cate) throws IOException { + HashMap map = storeFile(file,cate); return map; } @Override - public HashMap storeFile(MultipartFile multipartFile,String cate) throws IOException { - HashMap map = new HashMap<>(); + public HashMap storeFile(MultipartFile multipartFile,String cate) throws IOException { + HashMap map = new HashMap<>(); Attachment attachment=new Attachment(); File path = null; try { @@ -70,6 +70,7 @@ public class AttachmentServiceImpl implements AttachmentService { // attachment.setId(id); attachmentDao.insertSelective(attachment); + map.put("id", String.valueOf(attachment.getId())); multipartFile.transferTo(fileUp); map.put("url", "/img" + relPath); @@ -83,8 +84,8 @@ public class AttachmentServiceImpl implements AttachmentService { } @Override - public HashMap updateFile(MultipartFile multipartFile, String cate, Config config) throws IOException { - HashMap map = new HashMap<>(); + public HashMap updateFile(MultipartFile multipartFile, String cate, Config config) throws IOException { + HashMap map = new HashMap<>(); Attachment attachment=new Attachment(); File path = null; try { @@ -119,7 +120,7 @@ public class AttachmentServiceImpl implements AttachmentService { // attachment.setId(id); attachmentDao.updateByPrimaryKeySelective(attachment); // map.put("id", String.valueOf(attachment.getId())); - map.put("msg","更新成功!"); + map.put("code",200); map.put("id", String.valueOf(attachment.getId())); multipartFile.transferTo(fileUp); map.put("url", "/img" + relPath); diff --git a/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java index 7cda1a7..427b134 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/QRCServiceImpl.java @@ -22,18 +22,21 @@ public class QRCServiceImpl implements QRCService{ @Autowired private CollectIconListDao collectIconListDao; - public String QR(int url_id) throws Exception { + public String QR(Integer url_id) throws Exception { String logoPath = "src/main/resources/static/logo/NAV.png"; String destPath = "src/main/resources/static/qr"; UrlList urlList = urlListDao.selectByPrimaryKey(Long.valueOf(url_id)); - String url = urlList.getUrl(); - String list = collectIconListDao.selectByUrlid(url_id); CollectIconList collectIconList = new CollectIconList(); + String url = urlList.getUrl(); + collectIconList.setUrl_id(url_id); + String list = collectIconListDao.selectByUrlid(url_id); if (list == null) { String base64 = QRCodeUtil.ImageToBase64(QRCodeUtil.encode(url, logoPath, destPath, true)); collectIconList.setQr_url(base64); collectIconListDao.insertSelective(collectIconList); - return JSON.toJSONString(base64); +// return JSON.toJSONString(collectIconListDao.selectByUrlid(url_id)); +// return JSON.toJSONString(base64); + return null; }else { return JSON.toJSONString(collectIconListDao.selectByUrlid(url_id)); } diff --git a/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java index 640e45b..59cca96 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/RedisServiceImpl.java @@ -135,7 +135,7 @@ public class RedisServiceImpl implements RedisService { if (result.size() > HOT_SEARCH_NUMBER) { break; } - System.out.println(valueOperations.get(val)); + // System.out.println(valueOperations.get(val)); Long time = Long.valueOf(Objects.requireNonNull(valueOperations.get("search:search-time:"+val))); //返回最近一个月的数据 if ((now - time) < HOT_SEARCH_TIME) { diff --git a/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java index f3ddada..09daef3 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java @@ -111,7 +111,7 @@ public class UrlCateListServiceImpl implements UrlCateListService { if(urlCateList.getId() == Integer.valueOf(str)){ int cateNum = CateNumber.get(urlCateList.getName())+1; CateNumber.put(urlCateList.getName(),cateNum); - System.out.println(urlCateList.getName()); + // System.out.println(urlCateList.getName()); break; } } @@ -146,13 +146,11 @@ public class UrlCateListServiceImpl implements UrlCateListService { int parentId = urlCateList.getId(); for(UrlList urlList : urlLists) { - if(urlList.getCateId() == parentId) - { + if(!String.valueOf(urlList.getCateId()).equals(parentId+"")) continue ; JSONObject jsonObject = new JSONObject(); jsonObject.put(urlList.getName(),urlList.getUrl()); jsonArray.add(jsonObject); - break; - } + } } return jsonArray; diff --git a/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java index 70c3edb..1e7b7cc 100644 --- a/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java +++ b/src/main/java/com/lovenav/service/serviceImpl/UserServiceImpl.java @@ -117,7 +117,7 @@ public class UserServiceImpl implements UserService { @Override public User selectUserAlreadyExist(User user) { - System.out.println(user.getUserEmail()); + // System.out.println(user.getUserEmail()); User user1=userDao.selectByEmail(user.getUserEmail()); return user1; } diff --git a/src/main/java/com/lovenav/utils/QRCodeUtil.java b/src/main/java/com/lovenav/utils/QRCodeUtil.java index 0f893e8..bbb1bbf 100644 --- a/src/main/java/com/lovenav/utils/QRCodeUtil.java +++ b/src/main/java/com/lovenav/utils/QRCodeUtil.java @@ -488,7 +488,7 @@ public class QRCodeUtil { String base64 = "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"; GenerateImage(base64, "src/main/resources/static/icon"); - System.out.println(GenerateImage(base64, "src/main/resources/static/icon")); + // System.out.println(GenerateImage(base64, "src/main/resources/static/icon")); // String text = "https://www.baidu.com"; //这里设置自定义网站url // String logoPath ="src/main/resources/static/logo/NAV.png"; // String destPath = "src/main/resources/static/qr"; diff --git a/src/main/java/com/lovenav/utils/UrlCheckUtil.java b/src/main/java/com/lovenav/utils/UrlCheckUtil.java index b0f8635..75db8b9 100644 --- a/src/main/java/com/lovenav/utils/UrlCheckUtil.java +++ b/src/main/java/com/lovenav/utils/UrlCheckUtil.java @@ -62,7 +62,7 @@ public class UrlCheckUtil { }catch (SocketException e) { return "404"; } catch (IOException e) { - System.out.println("报错"); + System.out.println("报错"); return "404"; } return String.valueOf(statusCode); @@ -74,7 +74,7 @@ public class UrlCheckUtil { public static boolean CheckHttp(String address) throws URISyntaxException, MalformedURLException { URL url = new URL(address); URI uri = url.toURI(); - System.out.println(uri.getScheme()); + // System.out.println(uri.getScheme()); if(uri.getScheme().equals("https")){ return true; }else