|
|
@@ -0,0 +1,516 @@
|
|
|
+package com.mes.util;
|
|
|
+
|
|
|
+import MvCameraControlWrapper.CameraControlException;
|
|
|
+import MvCameraControlWrapper.MvCameraControl;
|
|
|
+import MvCameraControlWrapper.MvCameraControlDefines;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.mes.ui.MesClient;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.nio.file.Files;
|
|
|
+import java.nio.file.Path;
|
|
|
+import java.nio.file.Paths;
|
|
|
+import java.nio.file.StandardCopyOption;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
+import static MvCameraControlWrapper.MvCameraControlDefines.*;
|
|
|
+
|
|
|
+public class CameraUtils {
|
|
|
+
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(CameraUtils.class);
|
|
|
+ private String error = "";
|
|
|
+ private MvCameraControlDefines.Handle hCamera = null;
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param serialNumber 设备序列号
|
|
|
+ */
|
|
|
+ public CameraUtils(String serialNumber){
|
|
|
+ int nRet = MV_OK;
|
|
|
+ int camIndex = -1;
|
|
|
+
|
|
|
+ ArrayList<MvCameraControlDefines.MV_CC_DEVICE_INFO> stDeviceList = null;
|
|
|
+
|
|
|
+ // MesClient.setMenuStatus("SDK Version " + MvCameraControl.MV_CC_GetSDKVersion(),0);
|
|
|
+// // Initialize SDK
|
|
|
+ nRet = MvCameraControl.MV_CC_Initialize();
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "Initialize SDK fail!";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Enumerate devices
|
|
|
+ try {
|
|
|
+ stDeviceList = MvCameraControl.MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE | MV_GENTL_GIGE_DEVICE | MV_GENTL_CAMERALINK_DEVICE | MV_GENTL_CXP_DEVICE | MV_GENTL_XOF_DEVICE);
|
|
|
+ if (0 >= stDeviceList.size())
|
|
|
+ {
|
|
|
+ this.error = "No devices found!";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ int i = 0;
|
|
|
+ for (MV_CC_DEVICE_INFO stDeviceInfo : stDeviceList)
|
|
|
+ {
|
|
|
+ System.out.println("[camera " + (i++) + "]");
|
|
|
+ System.out.println(JSONObject.toJSONString(stDeviceInfo));
|
|
|
+
|
|
|
+ // stDeviceInfo.gigEInfo.userDefinedName
|
|
|
+ if(serialNumber.equals(stDeviceInfo.gigEInfo.serialNumber)){ //序列号相等
|
|
|
+ try {
|
|
|
+ hCamera = MvCameraControl.MV_CC_CreateHandle(stDeviceInfo);
|
|
|
+
|
|
|
+
|
|
|
+ } catch (CameraControlException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ hCamera = null;
|
|
|
+ this.error = "Create handle failed!" + e.toString();
|
|
|
+ e.printStackTrace();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (CameraControlException e) {
|
|
|
+ this.error = "Enumrate devices failed!" + e.toString();
|
|
|
+ e.printStackTrace();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 抓拍图片
|
|
|
+ /*param:
|
|
|
+ * filename: 文件名(图片)
|
|
|
+ * exposureTime: 曝光时间(曝光度)
|
|
|
+ * return boolean
|
|
|
+ * */
|
|
|
+ public Boolean getCameraImage(String filename,String exposureTime){
|
|
|
+ int nRet = MV_OK;
|
|
|
+ try{
|
|
|
+ // Open selected device
|
|
|
+ nRet = MvCameraControl.MV_CC_OpenDevice(hCamera);
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ log.error(filename+"连接相机失败");
|
|
|
+ this.error = "Connect to camera failed, errcode:" + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // make sure that Trigger mode is off
|
|
|
+ nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "TriggerMode", "Off");
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "SetTriggerMode failed, errcode:" + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 调焦,调整亮度, 值越大越亮
|
|
|
+// nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "ExposureTime", "268724.0000");
|
|
|
+ nRet = MvCameraControl.MV_CC_SetFloatValue(hCamera, "ExposureTime", Float.parseFloat(exposureTime));
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "ExposureTime failed, errcode:" + nRet;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Get payload size
|
|
|
+ MVCC_INTVALUE stParam = new MVCC_INTVALUE();
|
|
|
+ nRet = MvCameraControl.MV_CC_GetIntValue(hCamera, "PayloadSize", stParam);
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "Get PayloadSize fail, errcode:" + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Start grabbing images
|
|
|
+ nRet = MvCameraControl.MV_CC_StartGrabbing(hCamera);
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "Start Grabbing fail, errcode: " + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Get one frame
|
|
|
+ MV_FRAME_OUT_INFO stImageInfo = new MV_FRAME_OUT_INFO();
|
|
|
+ byte[] pData = new byte[(int)stParam.curValue];
|
|
|
+ nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 3000);
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "GetOneFrameTimeout fail, errcode: " + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+// System.err.println("11111111111111111");
|
|
|
+// nRet = SaveImage(MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg,pData,stImageInfo,sn+"_"+record_time,filename);
|
|
|
+ nRet = SaveImageTemp(MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg,pData,stImageInfo,filename);
|
|
|
+// nRet = SaveImageTemp(MV_SAVE_IAMGE_TYPE.MV_Image_Bmp,pData,stImageInfo,filename);
|
|
|
+ if(MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "Save image failed.nRet: " + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Stop grabbing
|
|
|
+ nRet = MvCameraControl.MV_CC_StopGrabbing(hCamera);
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "StopGrabbing failed, errcode: " + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // close device
|
|
|
+ nRet = MvCameraControl.MV_CC_CloseDevice(hCamera);
|
|
|
+ if (MV_OK != nRet)
|
|
|
+ {
|
|
|
+ this.error = "CloseDevice failed, errcode: " + nRet;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }catch (Exception e){
|
|
|
+ this.error = "get image fail: " + e.getMessage();
|
|
|
+ e.printStackTrace();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+// // 抓拍图片
|
|
|
+// public Boolean getCameraImage(String sn,String record_time,String filename,String exposureTime){
|
|
|
+// int nRet = MV_OK;
|
|
|
+// log.info("cameras1-sn:"+sn);
|
|
|
+// try{
|
|
|
+// // Open selected device
|
|
|
+// nRet = MvCameraControl.MV_CC_OpenDevice(hCamera);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "Connect to camera failed, errcode:" + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // make sure that Trigger mode is off
|
|
|
+// nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "TriggerMode", "Off");
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "SetTriggerMode failed, errcode:" + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 调焦,调整亮度, 值越大越亮
|
|
|
+// nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "ExposureTime", exposureTime);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "ExposureTime failed, errcode:" + nRet;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // Get payload size
|
|
|
+// MVCC_INTVALUE stParam = new MVCC_INTVALUE();
|
|
|
+// nRet = MvCameraControl.MV_CC_GetIntValue(hCamera, "PayloadSize", stParam);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "Get PayloadSize fail, errcode:" + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // Start grabbing images
|
|
|
+// nRet = MvCameraControl.MV_CC_StartGrabbing(hCamera);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "Start Grabbing fail, errcode: " + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // Get one frame
|
|
|
+// MV_FRAME_OUT_INFO stImageInfo = new MV_FRAME_OUT_INFO();
|
|
|
+// byte[] pData = new byte[(int)stParam.curValue];
|
|
|
+// nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 3000);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "GetOneFrameTimeout fail, errcode: " + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// System.err.println("11111111111111111");
|
|
|
+//// nRet = SaveImage(MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg,pData,stImageInfo,sn+"_"+record_time,filename);
|
|
|
+// nRet = SaveImageTemp(MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg,pData,stImageInfo,sn+"_"+record_time,filename);
|
|
|
+// if(MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "Save image failed.nRet: " + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // Stop grabbing
|
|
|
+// nRet = MvCameraControl.MV_CC_StopGrabbing(hCamera);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "StopGrabbing failed, errcode: " + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // close device
|
|
|
+// nRet = MvCameraControl.MV_CC_CloseDevice(hCamera);
|
|
|
+// if (MV_OK != nRet)
|
|
|
+// {
|
|
|
+// this.error = "CloseDevice failed, errcode: " + nRet;
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+//
|
|
|
+// return true;
|
|
|
+// }catch (Exception e){
|
|
|
+// this.error = "get image fail: " + e.getMessage();
|
|
|
+// e.printStackTrace();
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+ // 保存图片
|
|
|
+ public int SaveImage(MV_SAVE_IAMGE_TYPE enSaveImageType,byte[] dataToSave,MV_FRAME_OUT_INFO stImageInfo,String dir,String fileName)
|
|
|
+ {
|
|
|
+ MV_SAVE_IMAGE_TO_FILE_PARAM_EX stSaveFileParam = new MV_SAVE_IMAGE_TO_FILE_PARAM_EX();
|
|
|
+
|
|
|
+ stSaveFileParam.imageType = enSaveImageType; // ch:需要保存的图像类型 | en:Image format to save
|
|
|
+ stSaveFileParam.pixelType = stImageInfo.pixelType; // ch:相机对应的像素格式 | en:Camera pixel type
|
|
|
+ stSaveFileParam.width = stImageInfo.ExtendWidth; // ch:相机对应的宽 | en:Width
|
|
|
+ stSaveFileParam.height = stImageInfo.ExtendHeight; // ch:相机对应的高 | en:Height
|
|
|
+ stSaveFileParam.dataLen = stImageInfo.frameLen;
|
|
|
+ stSaveFileParam.data = dataToSave;
|
|
|
+ stSaveFileParam.methodValue = 1;
|
|
|
+
|
|
|
+// String saveDir = "D:/pic/"+dir+"/";
|
|
|
+ String saveDir = MesClient.saveDir+dir+"/";
|
|
|
+ log.info("saveDir:"+saveDir);
|
|
|
+ File file = new File(saveDir);
|
|
|
+ if (!file.exists()) {
|
|
|
+ boolean created = file.mkdirs();
|
|
|
+ }
|
|
|
+
|
|
|
+ // ch:jpg图像质量范围为(50-99]| en:jpg image nQuality range is (50-99]
|
|
|
+ stSaveFileParam.jpgQuality = 99;
|
|
|
+ if (MV_SAVE_IAMGE_TYPE.MV_Image_Bmp == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.bmp", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveDir+fileName+".bmp";
|
|
|
+ }
|
|
|
+ else if (MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.jpg", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveDir+fileName+".jpg";
|
|
|
+ }
|
|
|
+ else if (MV_SAVE_IAMGE_TYPE.MV_Image_Tif == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.tif", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveDir+fileName+".tif";
|
|
|
+ }
|
|
|
+ else if (MV_SAVE_IAMGE_TYPE.MV_Image_Png == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.png", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveDir+fileName+".png";
|
|
|
+ }
|
|
|
+
|
|
|
+ int nRet = MvCameraControl.MV_CC_SaveImageToFileEx(hCamera,stSaveFileParam);
|
|
|
+ return nRet;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 保存图片到临时目录
|
|
|
+ public int SaveImageTemp(MV_SAVE_IAMGE_TYPE enSaveImageType,byte[] dataToSave,MV_FRAME_OUT_INFO stImageInfo,String fileName)
|
|
|
+ {
|
|
|
+ MV_SAVE_IMAGE_TO_FILE_PARAM_EX stSaveFileParam = new MV_SAVE_IMAGE_TO_FILE_PARAM_EX();
|
|
|
+
|
|
|
+ stSaveFileParam.imageType = enSaveImageType; // ch:需要保存的图像类型 | en:Image format to save
|
|
|
+ stSaveFileParam.pixelType = stImageInfo.pixelType; // ch:相机对应的像素格式 | en:Camera pixel type
|
|
|
+ stSaveFileParam.width = stImageInfo.ExtendWidth; // ch:相机对应的宽 | en:Width
|
|
|
+ stSaveFileParam.height = stImageInfo.ExtendHeight; // ch:相机对应的高 | en:Height
|
|
|
+ stSaveFileParam.dataLen = stImageInfo.frameLen;
|
|
|
+ stSaveFileParam.data = dataToSave;
|
|
|
+ stSaveFileParam.methodValue = 1;
|
|
|
+
|
|
|
+ String saveTempDir = MesClient.saveTempDir;
|
|
|
+ log.info("saveTempDir:"+saveTempDir);
|
|
|
+ File file = new File(saveTempDir);
|
|
|
+ if (!file.exists()) {
|
|
|
+ boolean created = file.mkdirs();
|
|
|
+ log.info("文件夹创建:"+created);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ch:jpg图像质量范围为(50-99]| en:jpg image nQuality range is (50-99]
|
|
|
+ stSaveFileParam.jpgQuality = 99;
|
|
|
+ if (MV_SAVE_IAMGE_TYPE.MV_Image_Bmp == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.bmp", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveTempDir+fileName+".bmp";
|
|
|
+ }
|
|
|
+ else if (MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.jpg", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveTempDir+fileName+".jpg";
|
|
|
+ }
|
|
|
+ else if (MV_SAVE_IAMGE_TYPE.MV_Image_Tif == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.tif", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveTempDir+fileName+".tif";
|
|
|
+ }
|
|
|
+ else if (MV_SAVE_IAMGE_TYPE.MV_Image_Png == stSaveFileParam.imageType)
|
|
|
+ {
|
|
|
+// stSaveFileParam.imagePath = String.format("Image_w%d_h%d_fn%d.png", stImageInfo.ExtendWidth, stImageInfo.ExtendHeight, stImageInfo.frameNum);
|
|
|
+ stSaveFileParam.imagePath = saveTempDir+fileName+".png";
|
|
|
+ }
|
|
|
+
|
|
|
+ int nRet = MvCameraControl.MV_CC_SaveImageToFileEx(hCamera,stSaveFileParam);
|
|
|
+ return nRet;
|
|
|
+ }
|
|
|
+ public String getError(){
|
|
|
+ return this.error;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 清空临时目录下的所有内容(保留目录本身)
|
|
|
+ * @param tempDirPath 临时目录路径
|
|
|
+ * @return 是否成功清空
|
|
|
+ */
|
|
|
+ public static boolean cleanTempDirectory(String tempDirPath) {
|
|
|
+ Path tempDir = Paths.get(tempDirPath);
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 1. 验证目录有效性
|
|
|
+ if (!Files.exists(tempDir)) {
|
|
|
+ log.warn("临时目录不存在,无需清理: {}", tempDirPath);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!Files.isDirectory(tempDir)) {
|
|
|
+ log.error("路径不是目录: {}", tempDirPath);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 检查目录是否为空
|
|
|
+ try (Stream<Path> entries = Files.list(tempDir)) {
|
|
|
+ if (!entries.findFirst().isPresent()) {
|
|
|
+ log.debug("临时目录已为空: {}", tempDirPath);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 执行删除(先删文件后删子目录)
|
|
|
+ log.info("开始清空临时目录: {}", tempDirPath);
|
|
|
+ try (Stream<Path> walk = Files.walk(tempDir)) {
|
|
|
+ walk.sorted((a, b) -> b.compareTo(a)) // 逆序,先处理文件
|
|
|
+ .filter(path -> !path.equals(tempDir)) // 保留根目录
|
|
|
+ .forEach(path -> {
|
|
|
+ try {
|
|
|
+ Files.delete(path);
|
|
|
+ log.trace("已删除: {}", path);
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("删除失败: {} - {}", path, e.getMessage());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("临时目录清空完成: {}", tempDirPath);
|
|
|
+ return true;
|
|
|
+
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("清空临时目录异常: {} - {}", tempDirPath, e.getMessage(), e);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //提交-临时文件夹重命名
|
|
|
+ public static String renameTempDirectory(String tempDirPath, String newFolderName) {
|
|
|
+ try {
|
|
|
+ // 1. 检查临时文件夹是否存在
|
|
|
+ Path sourcePath = Paths.get(tempDirPath);
|
|
|
+ if (!Files.exists(sourcePath)) {
|
|
|
+ log.info("临时文件夹不存在: {}", tempDirPath);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 生成目标文件夹路径(同一父目录下)
|
|
|
+ Path parentDir = sourcePath.getParent();
|
|
|
+ Path targetPath = parentDir.resolve(newFolderName);
|
|
|
+
|
|
|
+ // 3. 执行重命名(原子操作,允许覆盖已存在文件夹)
|
|
|
+ Files.move(
|
|
|
+ sourcePath,
|
|
|
+ targetPath,
|
|
|
+ StandardCopyOption.ATOMIC_MOVE,
|
|
|
+ StandardCopyOption.REPLACE_EXISTING
|
|
|
+ );
|
|
|
+
|
|
|
+ //重命名文件夹后,把重命名后文件夹下的图片上传到服务器
|
|
|
+// uploadAllImagesFromDirectory(targetPath.toString());
|
|
|
+ log.info("文件夹重命名成功: " + targetPath);
|
|
|
+ return targetPath.toString();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ //指定文件夹下文件上传
|
|
|
+ public static void uploadAllImagesFromDirectory(String directoryPath,String folderName) {
|
|
|
+ // 1. 获取目录下所有图片文件
|
|
|
+ List<File> imageFiles = getImageFilesInDirectory(directoryPath);
|
|
|
+ if (imageFiles.isEmpty()) {
|
|
|
+ log.warn("目录下无图片文件: {}", directoryPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ //url
|
|
|
+ String url = "http://"+MesClient.mes_server_ip+":8980/js/a/mes/mesGp12Record/upload";
|
|
|
+
|
|
|
+
|
|
|
+ HashMap<String, String> hashMap = new HashMap<>();
|
|
|
+
|
|
|
+ hashMap.put("sn",MesClient.product_sn.getText());
|
|
|
+ hashMap.put("oprno",MesClient.mes_gw);
|
|
|
+ hashMap.put("cateSn","LXXT");
|
|
|
+ hashMap.put("lineSn",MesClient.mes_line_sn);
|
|
|
+ hashMap.put("remark",folderName);
|
|
|
+ try {
|
|
|
+ CommonResp<String> resp = HttpUtils.uploadFilesWithParams(imageFiles, url, hashMap);
|
|
|
+ if ("true".equals(resp.getResult())){
|
|
|
+ MesClient.setMenuStatus("上传成功",0);
|
|
|
+ MesClient.resetScanA();
|
|
|
+ }else{
|
|
|
+ MesClient.setMenuStatus("上传失败-"+resp.getMessage(),-1);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ MesClient.setMenuStatus("上传失败-请求接口错误",-1);
|
|
|
+ log.error("上传失败,http请求失败");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取目录下所有图片文件(按扩展名过滤)
|
|
|
+ */
|
|
|
+ private static List<File> getImageFilesInDirectory(String directoryPath) {
|
|
|
+ try {
|
|
|
+ String[] allowedExtensions = {"jpg", "jpeg", "png", "bmp", "webp"};
|
|
|
+ return Files.walk(Paths.get(directoryPath))
|
|
|
+ .filter(Files::isRegularFile)
|
|
|
+ .filter(path -> {
|
|
|
+ String fileName = path.getFileName().toString().toLowerCase();
|
|
|
+ for (String ext : allowedExtensions) {
|
|
|
+ if (fileName.endsWith("." + ext)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ })
|
|
|
+ .map(Path::toFile)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.info("获取目录下所有图片文件--------失败");
|
|
|
+ MesClient.setMenuStatus("上传失败-获取图片错误",-1);
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|