| | |
| | | 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.beans.factory.annotation.Value; |
| | | 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.math.BigInteger; |
| | | import java.security.MessageDigest; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | |
| | |
| | | * @date 2020/12/17 15:31 |
| | | */ |
| | | @Slf4j |
| | | @AllArgsConstructor |
| | | @Component |
| | | public class AliOssFileServiceImpl implements IFileUpload { |
| | | |
| | | private final String endPoint; |
| | | private final String keyId; |
| | | private final String keySecret; |
| | | private final String bucketName; |
| | | private final String host; |
| | | @Value("${oss-conf.end-point}") |
| | | private String endPoint; |
| | | @Value("${oss-conf.key-id}") |
| | | private String keyId; |
| | | @Value("${oss-conf.key-secret}") |
| | | private String keySecret; |
| | | @Value("${oss-conf.bucket-name}") |
| | | private String bucketName; |
| | | |
| | | private String host; |
| | | |
| | | @Override |
| | | public FileUploadDto uploadFile(MultipartFile multipartFile) { |
| | |
| | | long size = multipartFile.getSize(); |
| | | String suffix = FileUtil.getSuffix(originalFilename); |
| | | String dayStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")); |
| | | String fileName = dayStr + UUID.fastUUID().toString() + "." + suffix; |
| | | String fileName = dayStr + UUID.fastUUID() + "." + suffix; |
| | | |
| | | String md5 = getMD5(multipartFile); |
| | | FileUploadDto uploadDto = new FileUploadDto(); |
| | | OSS ossClient = new OSSClientBuilder().build(endPoint, keyId, keySecret); |
| | | try { |
| | |
| | | } |
| | | //上传文件 |
| | | 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); |
| | | uploadDto.setMd5(md5); |
| | | |
| | | 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); |
| | | |
| | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * 获取上传文件的MD5值 |
| | | * |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public String getMD5(MultipartFile file) { |
| | | |
| | | try { |
| | | byte[] uploadBytes = file.getBytes(); |
| | | MessageDigest md5 = MessageDigest.getInstance("MD5"); |
| | | byte[] digest = md5.digest(uploadBytes); |
| | | String hashString = new BigInteger(1, digest).toString(16); |
| | | if (hashString.length() % 2 != 0) { |
| | | hashString = "0" + hashString; |
| | | } |
| | | return hashString; |
| | | } catch (Exception e) { |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |