设备图片上传

This commit is contained in:
huguanghan 2024-12-24 15:14:13 +08:00
parent 187ce232a8
commit e6f1aed780
6 changed files with 163 additions and 64 deletions

View File

@ -196,8 +196,8 @@ public class EquipmentController {
}
@RequestMapping(value = "/file/upload", method = RequestMethod.POST)
public R<SysEquipmentDocs> addFile(Long deviceId, String folderName, MultipartFile file) {
SysEquipmentDocs upload = sysEquipmentService.upload(deviceId, folderName, file);
public R<List<SysEquipmentDocs>> addFile(Long deviceId, String component,String folderName, List<MultipartFile> fileList) throws Exception {
List<SysEquipmentDocs> upload = sysEquipmentService.upload(deviceId, component,folderName, fileList);
return R.success(upload);
}
}

View File

@ -17,12 +17,18 @@ import java.util.Date;
@AllArgsConstructor
public class SysEquipmentDocs {
@TableId(value = "deviceid")
@TableId(value = "id")
private Long id;
@TableField(value = "deviceid")
private Long deviceId;
@TableField(value = "name")
private String name;
@TableField(value = "component")
private String component;
@TableField(value = "url")
private String url;
/**

View File

@ -39,5 +39,5 @@ public interface SysEquipmentService {
SysGenExtProps querySysEquipmentExtProps(Long id);
SysEquipmentDocs upload(Long deviceId, String folderName, MultipartFile file);
List<SysEquipmentDocs> upload(Long deviceId, String component,String folderName, List<MultipartFile> fileList) throws Exception;
}

View File

@ -1,6 +1,7 @@
package com.das.modules.equipment.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.poi.excel.ExcelReader;
@ -41,6 +42,7 @@ import jakarta.annotation.Resource;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
@ -50,6 +52,10 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@ -64,6 +70,7 @@ import java.util.List;
@Transactional(rollbackFor = Exception.class)
@Service
@Slf4j
public class SysEquipmentServiceImpl implements SysEquipmentService {
@Autowired
@ -98,6 +105,10 @@ public class SysEquipmentServiceImpl implements SysEquipmentService {
@Autowired
private SysEquipmentDocsMapper sysEquipmentDocsMapper;
// 7厘米转换为像素以300 DPI为基准
private static final int TARGET_WIDTH = 826; // 7厘米 * 300 DPI / 2.54
private static final int TARGET_HEIGHT = 826; // 7厘米 * 300 DPI / 2.54
@Override
public SysEquipmentVo creatSysEquipment(SysEquipmentDto sysEquipmentDto) {
@ -209,6 +220,7 @@ public class SysEquipmentServiceImpl implements SysEquipmentService {
/**
* 设备台账导出Excel
*
* @param sysEquipmentDto 查询参数
* @param request HttpServletRequest
* @param response HttpServletResponse
@ -418,22 +430,82 @@ public class SysEquipmentServiceImpl implements SysEquipmentService {
}
@Override
public SysEquipmentDocs upload(Long deviceId, String folderName, MultipartFile file) {
public List<SysEquipmentDocs> upload(Long deviceId, String component, String folderName, List<MultipartFile> fileList) throws Exception {
List<SysEquipmentDocs> result = new ArrayList<>();
for (MultipartFile file : fileList) {
DeviceInfoCache deviceInfoCache = equipmentCache.getDeviceInfoCacheById(deviceId);
String parent = FileConstants.FILE_SEPARATOR +"风机图片"+ FileConstants.FILE_SEPARATOR + deviceInfoCache.getDeviceCode();
String parent = FileConstants.FILE_SEPARATOR + "WindTurbine" + FileConstants.FILE_SEPARATOR + deviceInfoCache.getDeviceCode() + FileConstants.FILE_SEPARATOR + "pic";
File scale = null;
try {
String url = minioViewsServcie.upload(minioAutoProperties.getPublicBucket(), parent, folderName, file);
String fileName = url.substring(url.lastIndexOf("/"));
scale = scale(file);
String scaleFileName = scale.getName();
String scaleName = scaleFileName.substring(scaleFileName.lastIndexOf("_") + 1);
String scaleParent = FileConstants.FILE_SEPARATOR + "WindTurbine" + FileConstants.FILE_SEPARATOR + deviceInfoCache.getDeviceCode() + FileConstants.FILE_SEPARATOR + "thumbnailPic" + FileConstants.FILE_SEPARATOR + scaleName;
minioViewsServcie.uploadTemFile(minioAutoProperties.getPublicBucket(), scale, scaleParent);
String fileName = url.substring(url.lastIndexOf("/") + 1);
SysEquipmentDocs sysEquipmentDocs = saveDocs(deviceId, component, fileName, url);
SysEquipmentDocs sysEquipmentDocsScale = saveDocs(deviceId, component, scaleName, scaleParent);
result.add(sysEquipmentDocs);
result.add(sysEquipmentDocsScale);
} catch (Exception e) {
log.error("图片上传失败{}", e);
} finally {
if (scale != null && scale.exists()){
scale.delete();
}
}
}
return result;
}
public File scale(MultipartFile file) throws IOException {
// 获取原始文件名和文件类型
String originalFileName = file.getOriginalFilename();
String originalContentType = file.getContentType();
if (originalFileName == null || originalFileName.isEmpty()) {
throw new IllegalArgumentException("文件名不能为空");
}
if (originalContentType == null || originalContentType.isEmpty()) {
throw new IllegalArgumentException("文件类型不能为空");
}
// 创建临时文件名称基于原始文件名
File tempFile = File.createTempFile("thumbnail_", "_" + originalFileName);
InputStream inputStream = file.getInputStream();
try {
File mulFile = new File(System.getProperty("java.io.tmpdir") + "/" + file.getOriginalFilename());
// 将MultipartFile写入临时文件
file.transferTo(mulFile);
// 生成缩略图
ImgUtil.scale(mulFile, tempFile, 700, 700, null);
} finally {
IoUtil.close(inputStream);
}
return tempFile;
}
public SysEquipmentDocs saveDocs(Long deviceId, String component,String fileName,String url){
SysEquipmentDocs sysEquipmentDocs = new SysEquipmentDocs();
sysEquipmentDocs.setDeviceId(deviceId);
sysEquipmentDocs.setName(fileName);
sysEquipmentDocs.setUrl(url);
sysEquipmentDocs.setComponent(component);
sysEquipmentDocs.setUpdateTime(new Date());
SysEquipmentDocs sysEquipmentDocsInfo = sysEquipmentDocsMapper.selectById(deviceId);
QueryWrapper<SysEquipmentDocs> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("url",url);
SysEquipmentDocs sysEquipmentDocsInfo = sysEquipmentDocsMapper.selectOne(queryWrapper);
if (sysEquipmentDocsInfo == null) {
sysEquipmentDocsMapper.insert(sysEquipmentDocs);
} else {
sysEquipmentDocs.setId(sysEquipmentDocsInfo.getId());
sysEquipmentDocsMapper.updateById(sysEquipmentDocs);
}
return sysEquipmentDocs;
}
}

View File

@ -91,8 +91,7 @@ public class MinioViewsServcie {
.object(targetFile)
.stream(bais, 0, -1)
.build());
}
else {
} else {
targetFile = path + "/" + file.getOriginalFilename();
uploadFile(bucketName, file, targetFile, "application/octet-stream");
}
@ -128,6 +127,29 @@ public class MinioViewsServcie {
}
public void uploadTemFile(String bucketName, File file, String objectName) throws Exception {
try (FileInputStream fileInputStream = new FileInputStream(file)) {
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.contentType("application/octet-stream")
.stream(fileInputStream, file.length(), -1)
.build()
);
// 删除临时文件
if (!file.delete()) {
System.err.println("临时文件删除失败:" + file.getAbsolutePath());
}
} catch (Exception e) {
log.error("生成缩略图或上传到 MinIO 失败", e);
}
}
//获取路径下的文件夹文件列表
public List<FileNode> getFileTree(String directoryName) {
List<FileNode> fileNodes = new ArrayList<>();
@ -150,8 +172,7 @@ public class MinioViewsServcie {
if (!StringUtils.isBlank(directoryName)) {
relativePath = itemName.substring(directoryName.length());
parts = relativePath.split("/");
}
else {
} else {
parts = itemName.split("/");
}
String lastModifyTime = null;

View File

@ -109,6 +109,6 @@ tdengine:
minio:
url: http://192.168.109.187:9000
bucket: das
publicBucket: das-public
publicBucket: das-dock
accessKey: das
secretKey: zaq12WSX