新增 车位相机图片上传到OSS服务器

This commit is contained in:
Lemon
2023-12-13 10:43:50 +08:00
parent d81324fa77
commit f3c0874e7d
4 changed files with 177 additions and 47 deletions

View File

@@ -2,12 +2,15 @@ package com.jsowell.common.util.file;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.jsowell.common.config.AliyunOssConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@@ -62,4 +65,37 @@ public class AliyunOssUploadUtils {
}
return aliyunOssConfig.getUrl() + "/" + filePathName;
}
/**
* 上传到阿里云(车位相机用)
* @param compressedImageBytes
* @param fileName 文件名 (车位号 + 时间戳).jpg
* @return
*/
public static String upload2OSS(byte[] compressedImageBytes, String fileName) {
// 生成 OSSClient
OSS ossClient = new OSSClientBuilder().build(aliyunOssConfig.getEndpoint(), aliyunOssConfig.getAccessKeyId(), aliyunOssConfig.getAccessKeySecret());
// 创建对象元数据,默认是可读的
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(compressedImageBytes.length); // 设置内容长度
// 创建输入流
InputStream inputStream = new ByteArrayInputStream(compressedImageBytes);
//获取当前时间
LocalDateTime currentDate = LocalDateTime.now();
String dir_name = currentDate.getYear() + "/" + currentDate.getMonthValue() + "/" + currentDate.getDayOfMonth() + "/";
// 随机数
String randomNumber = Long.toHexString(currentDate.toEpochSecond(ZoneOffset.UTC)) + "-";
// 文件路径名称
String filePathName = aliyunOssConfig.getFilehost() + "/" + dir_name + randomNumber + fileName;
ossClient.putObject(aliyunOssConfig.getBucketName(), filePathName, inputStream, metadata);
// 关闭 OSS 客户端
ossClient.shutdown();
return aliyunOssConfig.getUrl() + "/" + filePathName;
}
}

View File

@@ -7,9 +7,12 @@ import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
@@ -76,4 +79,39 @@ public class ImageUtils {
IOUtils.closeQuietly(in);
}
}
/**
* 图像压缩方法
* @param originalImage 源图像
* @param quality 压缩质量
* @return
*/
public static BufferedImage compressImage(BufferedImage originalImage, double quality) {
BufferedImage compressedImage = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
// 设置压缩参数
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality((float) quality);
// 压缩图像
writer.setOutput(ImageIO.createImageOutputStream(outputStream));
writer.write(null, new IIOImage(originalImage, null, null), param);
// 读取压缩后的图像
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
compressedImage = ImageIO.read(inputStream);
// 关闭流
outputStream.close();
inputStream.close();
writer.dispose();
} catch (IOException e) {
e.printStackTrace();
}
return compressedImage;
}
}