You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

252 lines
11 KiB

3 years ago
package com.zh.project0512.controller;
import com.alibaba.fastjson.JSONObject;
//import com.zh.project0512.service.IUserService;
3 years ago
import com.zh.project0512.mapper.QywxDepartmentUserLinkMapper;
import com.zh.project0512.mapper.RankMapper;
import com.zh.project0512.service.ITaskService;
import com.zh.project0512.service.IVideoService;
3 years ago
import com.zh.project0512.utils.FileTypeUtil;
3 years ago
import com.zh.project0512.utils.RegexUtil;
3 years ago
import com.zh.project0512.utils.result.HttpStatusEnum;
import com.zh.project0512.utils.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
3 years ago
import net.coobird.thumbnailator.Thumbnails;
3 years ago
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
3 years ago
import org.springframework.util.StringUtils;
3 years ago
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
3 years ago
import ws.schild.jave.MultimediaObject;
3 years ago
3 years ago
import javax.annotation.Resource;
3 years ago
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
3 years ago
import java.io.File;
3 years ago
import java.io.IOException;
3 years ago
import java.math.BigDecimal;
3 years ago
import java.time.LocalDateTime;
import java.time.ZoneOffset;
3 years ago
import java.util.*;
3 years ago
import java.util.regex.Matcher;
import java.util.regex.Pattern;
3 years ago
import java.util.stream.Collectors;
3 years ago
/**
* <p>
*
* </p>
*
* @author zh
* @since 2022-05-12
*/
@Tag(name = "工具中心")
@RestController
@RequestMapping("/util")
public class UtilsController {
3 years ago
// @Autowired
// private RedisTemplate<String, String> redisTemplate;
// @Autowired
// private AliyunOss aliyunOss;
3 years ago
3 years ago
@Value("${web.uploadPath}")
3 years ago
private String path;
3 years ago
@Value("${web.picSizeLimit}")
private long picSizeLimit;
3 years ago
@Value("${web.cdn}")
private String cdn;
3 years ago
3 years ago
@Operation(summary = "上传")
3 years ago
@PostMapping("/upload")
@ResponseBody
3 years ago
public Result upload(@RequestParam("file") MultipartFile file, @RequestParam(required = false) String name, Boolean compress) {
3 years ago
if (file.isEmpty()) {
return Result.fail(HttpStatusEnum.CUSTOM_EXCEPTION, "请选择文件");
3 years ago
}
String fileName = file.getOriginalFilename();//文件名
3 years ago
String randomName = UUID.randomUUID().toString().replace("-", "") + LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
String newFileName = randomName + fileName.substring(fileName.lastIndexOf("."));
String newFileNameSmall = randomName + "Small" + fileName.substring(fileName.lastIndexOf("."));
JSONObject res = new JSONObject();
int fileTypeNum = FileTypeUtil.getcontentTypeNum((fileName.substring(fileName.lastIndexOf("."))));
3 years ago
//String path = System.getProperty("user.home"); //文件存储位置 我放在了我的项目下
3 years ago
// //获取jar包所在目录
// ApplicationHome h = new ApplicationHome(getClass());
// File jarF = h.getSource();
// //在jar包所在目录下生成一个upload文件夹用来存储上传的图片
// String dirPath = jarF.getParentFile().toString()+"/upload/";
// System.out.println(dirPath);
// System.out.println(path);
// File dest = new File(dirPath+fileName);
3 years ago
try {
3 years ago
String filePath = path + "/" + newFileName;
File dest = new File(filePath);
if (compress != null && compress &&fileTypeNum ==2&& file.getSize() >= picSizeLimit) {
String filePathSmall = path + "/" + newFileNameSmall;
File beforeFile = new File(filePathSmall);
//生成目标图片
Thumbnails.of(file.getInputStream()).scale(1f).toFile(beforeFile);
//压缩图片至指定大小下
commpressPicCycle(filePathSmall, picSizeLimit, 0.8);
res.put("fileUrlSmall", "/upload/" + newFileNameSmall);
}
// if (!dest.getParentFile().exists()) {
// dest.getParentFile().mkdirs();
// }
3 years ago
file.transferTo(dest);
3 years ago
3 years ago
res.put("fileUrl", "/upload/" + newFileName);
3 years ago
res.put("fileName", fileName);
3 years ago
res.put("fileType", FileTypeUtil.getcontentType((fileName.substring(fileName.lastIndexOf(".")))));
3 years ago
res.put("fileTypeNum", fileTypeNum);
if (fileTypeNum == 1) {
3 years ago
res.put("duration", new MultimediaObject(dest).getInfo().getDuration());
3 years ago
}
3 years ago
return Result.success(res, "上传完成");
3 years ago
} catch (Exception e) {
3 years ago
e.printStackTrace();
}
3 years ago
return Result.fail(HttpStatusEnum.CUSTOM_EXCEPTION, "上传失败");
3 years ago
}
3 years ago
// @PostMapping("/uploadImg")
// public Result uploadImg(@RequestParam("file") MultipartFile file, @RequestParam(value = "name", defaultValue = "name") String name) {
// try {
// String homeImage = aliyunOss.checkImage(file);//此处是调用上传服务接口
// String fileUrl = aliyunOss.getImgUrl(homeImage);
// String fileType = FileTypeUtil.getcontentType((fileUrl.substring(fileUrl.lastIndexOf("."))));
// System.out.println(fileType == "video/mp4" ? 1 : (fileType == "image/jpg" ? 2 : (fileType == "text/plain" ? 3 : 0)));
// Result result = Result.success("上传成功!");
// return result;
// } catch (Exception e) {
// e.printStackTrace();
// return Result.fail(HttpStatusEnum.NOT_FOUND);
// }
// }
@Operation(summary = "编辑器内上传")
@PostMapping("/upload2")
@ResponseBody
public JSONObject upload2(@RequestParam("file") MultipartFile file, @RequestParam(required = false) String name) {
JSONObject res = new JSONObject();
3 years ago
res.put("errno", 1);
3 years ago
if (file.isEmpty()) {
3 years ago
res.put("message", "请选择文件");
3 years ago
return res;
}
String fileName = file.getOriginalFilename();//文件名
String newFileName = UUID.randomUUID().toString().replace("-", "") + LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli() + fileName.substring(fileName.lastIndexOf("."));
File dest = new File(path + "/" + newFileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
3 years ago
try {
3 years ago
file.transferTo(dest);
3 years ago
res.replace("errno", 0);
3 years ago
JSONObject obj = new JSONObject();
obj.put("alt", fileName);
3 years ago
obj.put("url", cdn + "/upload/" + newFileName);
res.put("data", obj);
3 years ago
return res;
3 years ago
} catch (Exception e) {
3 years ago
e.printStackTrace();
}
3 years ago
res.put("message", "上传失败");
3 years ago
return res;
3 years ago
}
3 years ago
3 years ago
private static void commpressPicCycle(String desPath, long desFileSize, double accuracy) throws IOException {
File srcFileJPG = new File(desPath);
//如果小于指定大小不压缩;如果大于等于指定大小压缩
if (srcFileJPG.length() <= desFileSize) {
return;
}
// 计算宽高
BufferedImage bim = ImageIO.read(srcFileJPG);
int desWidth = new BigDecimal(bim.getWidth()).multiply(new BigDecimal(accuracy)).intValue();
int desHeight = new BigDecimal(bim.getHeight()).multiply(new BigDecimal(accuracy)).intValue();
Thumbnails.of(desPath).size(desWidth, desHeight).outputQuality(accuracy).toFile(desPath);
commpressPicCycle(desPath, desFileSize, accuracy);
}
3 years ago
@Autowired
private ITaskService taskService;
@Resource
QywxDepartmentUserLinkMapper qywxDepartmentUserLinkMapper;
@Resource
RankMapper rankMapper;
@Autowired
private IVideoService videoService;
3 years ago
3 years ago
@PostMapping("/test")
@ResponseBody
3 years ago
public Result test() {
3 years ago
String url = "http://www.baidu.com/#wd=%E6%88%91%E6%98%AF%E6%AD%8C%E6%89%8B&rsv_bp=0&tn=baidu&rsv_spt=3&ie=utf-8&rsv_sug3=11&rsv_sug4=643&rsv_sug1=11&inputT=5484&rsv_sug2=0";
Pattern p = Pattern.compile("(http://|https://)?([^/]*)", Pattern.CASE_INSENSITIVE);
3 years ago
Matcher m = p.matcher(url);
3 years ago
String a = m.find() ? m.group(2) : url;
3 years ago
// (https://)+\S*\s
return Result.success(a);
3 years ago
}
3 years ago
3 years ago
public static void main(String[] args) {
3 years ago
String url = "4.38 wfb:/ 复制打开抖音,看看【酸味真火的作品】坚持总会有收获的# 意想不到的情侣健身 https://v.douyin.com/YT982Sf/";
Pattern p = Pattern.compile("((https://)+\\S*(/)\\S*(/))", Pattern.CASE_INSENSITIVE);
System.out.println(new RegexUtil().httpReg(url));
3 years ago
// Matcher m = p.matcher(url);
3 years ago
// System.out.println(m);
// String a = m.find() ? m.group(1) : url;
3 years ago
// System.out.println(a);
3 years ago
// int b = StringUtils.countOccurrencesOf(a, "https://v.douyin");
3 years ago
// System.out.println(b);
3 years ago
3 years ago
3 years ago
// List<String> list1 = new ArrayList<String>();
// list1.add("1");
// list1.add("2");
// list1.add("3");
// list1.add("5");
// list1.add("6");
// List<String> list2 = new ArrayList<String>();
// list2.add("2");
// list2.add("3");
// list2.add("7");
// list2.add("8");
//// 交集
// List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
// System.out.println("---交集 intersection---");
// intersection.parallelStream().forEach(System.out::println);
//// 差集 (list1 - list2)
// List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
// System.out.println("---差集 reduce1 (list1 - list2)---");
// reduce1.parallelStream().forEach(System.out::println);
//// 差集 (list2 - list1)
// List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
// System.out.println("---差集 reduce2 (list2 - list1)---");
// reduce2.parallelStream().forEach(System.out::println);
//// 并集
// List<String> listAll = list1.parallelStream().collect(Collectors.toList());
// List<String> listAll2 = list2.parallelStream().collect(Collectors.toList());
// listAll.addAll(listAll2);
// System.out.println("---并集 listAll---");
// listAll.parallelStream().forEachOrdered(System.out::println);
//// 去重并集
// List<String> listAllDistinct = listAll.stream().distinct().collect(Collectors.toList());
// System.out.println("---得到去重并集 listAllDistinct---");
// listAllDistinct.parallelStream().forEachOrdered(System.out::println);
// System.out.println("---原来的List1---");
// list1.parallelStream().forEachOrdered(System.out::println);
// System.out.println("---原来的List2---");
// list2.parallelStream().forEachOrdered(System.out::println);
3 years ago
}
3 years ago
}