|
@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.admin.service;
|
|
|
|
|
|
import cn.com.qmth.stmms.ms.admin.dto.StudentDTO;
|
|
|
import cn.com.qmth.stmms.ms.commons.config.ImageCompressionConfig;
|
|
|
+import cn.com.qmth.stmms.ms.commons.config.ImageConfig;
|
|
|
import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
|
|
|
import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
|
|
@@ -58,7 +59,8 @@ public class DataUploadService {
|
|
|
@Autowired
|
|
|
private MarkTaskRepo markTaskRepo;
|
|
|
|
|
|
- File srcFile = new File("/Users/king/stmms-ms/static/images/6/SM/1/1901040150.jpg"); //初始文件
|
|
|
+ @Autowired
|
|
|
+ ImageConfig imageConfig;
|
|
|
|
|
|
/**
|
|
|
* 上传考生试卷数据
|
|
@@ -76,61 +78,94 @@ public class DataUploadService {
|
|
|
OutputStream outputStream = null;
|
|
|
OutputStream outputStreamTemp = null;
|
|
|
try {
|
|
|
+ FileInputStream sheetIn = null;
|
|
|
+ FileInputStream slicein = null;
|
|
|
Student student = studentRepo.findOne(studentId);
|
|
|
- //保存裁切原图+文件名加密
|
|
|
- String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
- + File.separator + student.getAreaCode();
|
|
|
- File out = new File(imageDir);
|
|
|
- if (!out.exists()) {
|
|
|
- out.mkdirs();
|
|
|
- }
|
|
|
+ if (imageConfig.isImageEnc()) {
|
|
|
+ //保存裁切原图+文件名加密
|
|
|
+ String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode();
|
|
|
+ File out = new File(imageDir);
|
|
|
+ if (!out.exists()) {
|
|
|
+ out.mkdirs();
|
|
|
+ }
|
|
|
|
|
|
- String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
|
|
|
- File imageFile = new File(imageDir + File.separator + imageMd5 + ".jpg");
|
|
|
- File imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
|
|
|
- LOGGER.info("image存放目录:{}", imageFile.getPath());
|
|
|
- outputStream = new FileOutputStream(imageFile);
|
|
|
- outputStreamTemp = new FileOutputStream(imageFileTemp);
|
|
|
- int index = 0;
|
|
|
- byte[] bytes = new byte[1024];
|
|
|
- byte[] bytesEnc = new byte[1024];
|
|
|
- while ((index = in.read(bytes)) != -1) {
|
|
|
- //将字节数组的数据全部写入到输出流中
|
|
|
- for (int i = 0; i < index; i++) {
|
|
|
- //通过异或运算加密
|
|
|
- bytesEnc[i] = (byte) (bytes[i] ^ SystemConstant.SECRET_KEY);
|
|
|
+ String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
|
|
|
+ File imageFile = new File(imageDir + File.separator + imageMd5 + ".jpg");
|
|
|
+ File imageFileTemp = new File(imageDir + File.separator + imageMd5 + "temp.jpg");
|
|
|
+ LOGGER.info("image存放目录:{}", imageFile.getPath());
|
|
|
+ outputStream = new FileOutputStream(imageFile);
|
|
|
+ outputStreamTemp = new FileOutputStream(imageFileTemp);
|
|
|
+ int index = 0;
|
|
|
+ byte[] bytes = new byte[1024];
|
|
|
+ byte[] bytesEnc = new byte[1024];
|
|
|
+ while ((index = in.read(bytes)) != -1) {
|
|
|
+ //将字节数组的数据全部写入到输出流中
|
|
|
+ for (int i = 0; i < index; i++) {
|
|
|
+ //通过异或运算加密
|
|
|
+ bytesEnc[i] = (byte) (bytes[i] ^ SystemConstant.SECRET_KEY);
|
|
|
+ }
|
|
|
+ outputStream.write(bytesEnc, 0, index);
|
|
|
+ outputStreamTemp.write(bytes, 0, index);
|
|
|
}
|
|
|
- outputStream.write(bytesEnc, 0, index);
|
|
|
- outputStreamTemp.write(bytes, 0, index);
|
|
|
- }
|
|
|
|
|
|
- //生成缩略图
|
|
|
- String thumbDir = systemConfig.getThumbDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
- + File.separator + student.getAreaCode();
|
|
|
- File thumb = new File(thumbDir);
|
|
|
- if (!thumb.exists()) {
|
|
|
- thumb.mkdirs();
|
|
|
- }
|
|
|
+ //生成缩略图
|
|
|
+ String thumbDir = systemConfig.getThumbDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode();
|
|
|
+ File thumb = new File(thumbDir);
|
|
|
+ if (!thumb.exists()) {
|
|
|
+ thumb.mkdirs();
|
|
|
+ }
|
|
|
+
|
|
|
+ BufferedImage bufferedImage = ImageCompression.compress(imageFileTemp, compressionConfig);
|
|
|
+ File thumbFile = new File(thumbDir + File.separator + imageMd5 + ".jpg");
|
|
|
+ LOGGER.info("thumb存放目录:{}", thumbFile.getPath());
|
|
|
+ outputStream = new FileOutputStream(thumbFile);
|
|
|
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
|
+ ImageIO.write(bufferedImage, "jpg", os);
|
|
|
+ in = new ByteArrayInputStream(os.toByteArray());
|
|
|
|
|
|
- BufferedImage bufferedImage = ImageCompression.compress(imageFileTemp, compressionConfig);
|
|
|
- File thumbFile = new File(thumbDir + File.separator + imageMd5 + ".jpg");
|
|
|
- LOGGER.info("thumb存放目录:{}", thumbFile.getPath());
|
|
|
- outputStream = new FileOutputStream(thumbFile);
|
|
|
- ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
|
- ImageIO.write(bufferedImage, "jpg", os);
|
|
|
- in = new ByteArrayInputStream(os.toByteArray());
|
|
|
+ //原图删除
|
|
|
+ imageFileTemp.delete();
|
|
|
+ writeStream(in, outputStream);
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
+ LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
|
|
|
|
|
|
- //原图删除
|
|
|
- imageFileTemp.delete();
|
|
|
- writeStream(in, outputStream);
|
|
|
- long end = System.currentTimeMillis();
|
|
|
- LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
|
|
|
+ sheetIn = new FileInputStream(imageFile.getPath());
|
|
|
+ slicein = new FileInputStream(thumbFile.getPath());
|
|
|
+ } else {
|
|
|
+ String savePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode();
|
|
|
+ File out = new File(savePath);
|
|
|
+ if (!out.exists()) {
|
|
|
+ out.mkdirs();
|
|
|
+ }
|
|
|
+ File outFile = new File(savePath + File.separator + student.getExamNumber() + ".jpg");
|
|
|
+ if (!outFile.exists()) {
|
|
|
+ outFile.createNewFile();
|
|
|
+ }
|
|
|
+ OutputStream output = new FileOutputStream(outFile);
|
|
|
+ byte[] buffer = new byte[in.available()];
|
|
|
+ in.read(buffer);
|
|
|
+ output.write(buffer);
|
|
|
+ output.close();
|
|
|
+
|
|
|
+ // 生成缩略图
|
|
|
+ String thumbDir = systemConfig.getThumbDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode();
|
|
|
+ File thumb = new File(thumbDir);
|
|
|
+ if (!thumb.exists()) {
|
|
|
+ thumb.mkdirs();
|
|
|
+ }
|
|
|
+ BufferedImage bufferedImage = ImageCompression.compress(outFile, compressionConfig);
|
|
|
+ String thumbFileName = thumbDir + File.separator + student.getExamNumber() + ".jpg";
|
|
|
+ ImageIO.write(bufferedImage, "jpg", new File(thumbFileName));
|
|
|
|
|
|
+ sheetIn = new FileInputStream(savePath + File.separator + student.getExamNumber() + ".jpg");
|
|
|
+ slicein = new FileInputStream(thumbFileName);
|
|
|
+ }
|
|
|
Paper exist = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject,
|
|
|
student.getExamNumber());
|
|
|
-
|
|
|
- FileInputStream sheetIn = new FileInputStream(imageFile.getPath());
|
|
|
- FileInputStream slicein = new FileInputStream(thumbFile.getPath());
|
|
|
String sheetMD5 = DigestUtils.md5Hex(sheetIn);
|
|
|
String sliceMD5 = DigestUtils.md5Hex(slicein);
|
|
|
sheetIn.close();
|
|
@@ -276,11 +311,20 @@ public class DataUploadService {
|
|
|
paper.setUploadedOn(new Date());
|
|
|
paper.setManual(isManual);
|
|
|
|
|
|
- String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
|
|
|
- String sheetPath = systemConfig.getSheetDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
- + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
|
|
|
- String slicePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
- + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
|
|
|
+ String sheetPath = null;
|
|
|
+ String slicePath = null;
|
|
|
+ if (imageConfig.isImageEnc()) {
|
|
|
+ String imageMd5 = MD5Util.getImageRuleMd5(student.getWorkId(), subject.ordinal(), student.getAreaCode(), student.getExamNumber(), student.getId());
|
|
|
+ sheetPath = systemConfig.getSheetDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
|
|
|
+ slicePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode() + File.separator + imageMd5 + ".jpg";
|
|
|
+ } else {
|
|
|
+ sheetPath = systemConfig.getSheetDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode() + File.separator + student.getExamNumber() + ".jpg";
|
|
|
+ slicePath = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
|
+ + File.separator + student.getAreaCode() + File.separator + student.getExamNumber() + ".jpg";
|
|
|
+ }
|
|
|
FileInputStream sheetIn = new FileInputStream(sheetPath);
|
|
|
FileInputStream slicein = new FileInputStream(slicePath);
|
|
|
String sheetMD5 = DigestUtils.md5Hex(sheetIn);
|