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.File; 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()+ "." + 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; } public FileUploadDto uploadFile(File multipartFile) { String originalFilename = multipartFile.getName(); // long size = multipartFile.get(); String suffix = FileUtil.getSuffix(originalFilename); String dayStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); String fileName = dayStr + UUID.fastUUID()+ "." + 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, multipartFile)); //设置权限 这里是公开读 // 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()); return uploadDto; } }