package com.sandu.common.file.impl;
|
|
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.lang.UUID;
|
import cn.hutool.core.util.StrUtil;
|
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSSClientBuilder;
|
import com.aliyun.oss.model.CannedAccessControlList;
|
import com.aliyun.oss.model.CreateBucketRequest;
|
import com.aliyun.oss.model.PutObjectRequest;
|
import com.aliyun.oss.model.PutObjectResult;
|
import com.sandu.common.enums.FileStorageEnums;
|
import com.sandu.common.execption.BusinessException;
|
import com.sandu.common.file.FileUploadDto;
|
import com.sandu.common.file.IFileUpload;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.imageio.ImageIO;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayInputStream;
|
import java.io.IOException;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
|
/**
|
* @author chenjiantian
|
* @date 2020/12/17 15:31
|
*/
|
@Slf4j
|
@Component
|
public class AliOssFileServiceImpl implements IFileUpload {
|
|
private final String endPoint="oss-cn-shanghai.aliyuncs.com";
|
private final String keyId="LTAI5tPdpt5wvJyLipRijFSP";
|
private final String keySecret="1ahYfCKd0yTddsUnuDLQzI23MLh4VQ";
|
private final String bucketName= "ximonsmart";
|
private String host;
|
|
@Override
|
public FileUploadDto uploadFile(MultipartFile multipartFile) {
|
String originalFilename = multipartFile.getOriginalFilename();
|
long size = multipartFile.getSize();
|
String suffix = FileUtil.getSuffix(originalFilename);
|
String dayStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
|
String fileName = dayStr + UUID.fastUUID().toString() + "." + suffix;
|
|
FileUploadDto uploadDto = new FileUploadDto();
|
OSS ossClient = new OSSClientBuilder().build(endPoint, keyId, keySecret);
|
try {
|
//容器不存在,就创建
|
if (!ossClient.doesBucketExist(bucketName)) {
|
ossClient.createBucket(bucketName);
|
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
|
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
|
ossClient.createBucket(createBucketRequest);
|
}
|
//上传文件
|
PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileName, new ByteArrayInputStream(multipartFile.getBytes())));
|
//设置权限 这里是公开读
|
// ossClient.setBucketAcl(ossProperties.getBucketName(), CannedAccessControlList.PublicRead);
|
|
if (result != null) {
|
String url = "";
|
// https://BucketName.Endpoint/ObjectName
|
if (StrUtil.isBlank(host)) {
|
url = "https://" + bucketName + "." + endPoint + "/" + fileName;
|
} else {
|
if (!host.endsWith("/")) {
|
url = host + "/" + fileName;
|
} else {
|
url = host + fileName;
|
}
|
}
|
uploadDto.setFileUrl(url);
|
}
|
} catch (Exception e) {
|
log.error(e.getMessage(), e);
|
throw new BusinessException(e.getMessage());
|
} finally {
|
//关闭
|
ossClient.shutdown();
|
}
|
|
uploadDto.setOriginName(originalFilename);
|
uploadDto.setFileName(fileName);
|
uploadDto.setFileType(FileUtil.extName(originalFilename));
|
uploadDto.setStorageType(FileStorageEnums.ALIBABA.getCode());
|
uploadDto.setFileSize(size);
|
|
if (IMAGE_SUFFIX_LIST.contains(uploadDto.getFileType())) {
|
BufferedImage img = null;
|
try {
|
img = ImageIO.read(multipartFile.getInputStream());
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
if (img != null && img.getWidth() >= 0 && img.getHeight() >= 0) {
|
uploadDto.setWidth(img.getWidth());
|
uploadDto.setHeight(img.getHeight());
|
}
|
}
|
return uploadDto;
|
}
|
}
|