位置:
ruoyi-admin
模块的com/ruoyi/web/controller/common/CommonController.java
/**
* 通用上传请求(单个)
*/
@PostMapping("/upload")
public AjaxResult uploadFile(MultipartFile file) throws Exception {
try {
// 获取文件上传路径
String filePath = RuoYiConfig.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
// 去除文件路径的前两级目录
String updatedFilePath = removePath(fileName);
// 添加水印
String watermarkFilePath = addWatermark(filePath + updatedFilePath);
// 构建访问上传后文件的URL
String url = serverConfig.getUrl() + watermarkFilePath;
// 构建响应对象并返回
AjaxResult ajax = AjaxResult.success();
ajax.put("url", url);
ajax.put("fileName", fileName);
ajax.put("newFileName", FileUtils.getName(fileName));
ajax.put("originalFilename", file.getOriginalFilename());
return ajax;
} catch (Exception e) {
// 如果发生异常,则返回错误信息
return AjaxResult.error(e.getMessage());
}
}
去除文件路径的前两级目录方法
/**
* 去除文件路径的前两级目录
*/
private String removePath(String filePath) {
int count = 0;
int index = -1;
for (int i = 0; i < filePath.length(); i++) {
// 统计斜杠数量,找到第三个斜杠的位置
if (filePath.charAt(i) == '/') {
count++;
if (count == 3) {
index = i;
break;
}
}
}
// 如果找到第三个斜杠,则返回之后的路径,否则返回原路径
if (index != -1) {
return filePath.substring(index);
}
return filePath;
}
/**
* 给图片文件添加水印
*/
private String addWatermark(String filePath) throws IOException {
// 读取图片文件
BufferedImage image = ImageIO.read(new File(filePath));
// 创建Graphics(坐标)对象,并设置水印文字的样式,可根据项目需要进行调整
Graphics2D g2d = (Graphics2D) image.getGraphics();
Font font = new Font("宋体", Font.BLACK, 20);
g2d.setFont(font);
g2d.setColor(Color.BLACK);
// 在右下角添加水印
String watermark = "kaifamiao专属水印";
int x = image.getWidth() - g2d.getFontMetrics().stringWidth(watermark) - 100;
int y = image.getHeight() - 100;
g2d.drawString(watermark, x, y);
// 保存添加水印后的图片,覆盖原始图片
File output = new File(filePath);
ImageIO.write(image, "jpg", output);
g2d.dispose();
return filePath;
}
注:使用
java
的Graphics2D
为图片添加水印,不需要额外的依赖
powered by kaifamiao