首先导入依赖
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.837</version>
</dependency>
主要配置声明
//密匙
private static final String ACCESS_KEY = "*";
//私钥
private static final String SECRET_KEY = "*";
//储存桶的名称
private static final String BUCKET_NAME = "*";
//所属地区
private static final String REGION = "*";
//域名地址
private static final String HUR = "*";
private static final BasicAWSCredentials AWS_CREDS = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
private static final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(AWS_CREDS))
//设置服务器所属地区
.withRegion(REGION)
.build();
主要代码
/**
*
* @param file 文件
* @return
*/
public JsonObject adds3ShrinkImg(MultipartFile file) {
// 文件后缀
String fileNameSuffix = getSuffix(Objects.requireNonNull(file.getOriginalFilename()));
String url = JsonUtil.toJson(fileSuffix);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(file.getContentType());
objectMetadata.setContentLength(file.getSize());
//文件夹
String folder = "test/";
//生成新的文件名
String img = folder + randomName() + "." + fileNameSuffix;
try {
//开始上传文件
s3.putObject(new PutObjectRequest(BUCKET_NAME, img, file.getInputStream(), objectMetadata));
//压缩操作
//下载原图
S3Object s3object = s3.getObject(BUCKET_NAME, img);
S3ObjectInputStream inputStream = s3object.getObjectContent();
BufferedImage originalImage = ImageIO.read(inputStream.getDelegateStream());
int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
int width = originalImage.getWidth();
int height = originalImage.getHeight();
// 缩略图宽度
int newWidth = 215;
// 缩略图高度
int newHeight = (int) Math.round(height * newWidth / (double) width);
BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
g.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(resizedImage, fileNameSuffix, baos);
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
// 上传缩略图
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(bytes.length);
metadata.setContentType(file.getContentType());
//生成压缩后文件名
String originalIma = folder + randomName()+newWidth+"."+fileNameSuffix;
//开始上传文件
s3.putObject(new PutObjectRequest(BUCKET_NAME, originalIma, bais, metadata));
} catch (Exception e) {
e.printStackTrace();
}
JsonObject objoect = new JsonObject();
objoect.addProperty("url",HUR + img);
return objoect;
}
/**
* 生成随机数
* @return
*/
private static String randomName() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String date = sdf.format(new Date());
int i = (int) ((Math.random() * 9 + 1) * 10000);
return date + i;
}
/**
* 获取文件后缀
*
* @param fileName
* @return
*/
public static String getSuffix(String fileName) {
return fileName.substring(fileName.lastIndexOf(".") + 1);
}