package com.lqkj.link.util; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.UUID; import java.util.concurrent.Callable; @Component public class AliOSSUtils { /** * 注入AliProperties */ private final AliProperties aliProperties; private final ThreadPoolUtil threadPoolUtil; public AliOSSUtils(AliProperties aliProperties, ThreadPoolUtil threadPoolUtil) { this.aliProperties = aliProperties; this.threadPoolUtil = threadPoolUtil; } /** * 实现上传图片到OSS */ public String upload(File file) { String originalFilename = file.getName(); String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf(".")); //上传文件到 OSS OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret()); threadPoolUtil.getTaskExecutor().execute(() -> { ossClient.putObject(aliProperties.getBucketName(), fileName, file); ossClient.shutdown(); }); //文件访问路径 String url = aliProperties.getEndpoint().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getEndpoint().split("//")[1] + "/" + fileName; // 关闭ossClient return url;// 把上传到oss的路径返回 } public String upload(MultipartFile file) throws IOException { // 获取上传的文件的输入流 try { InputStream inputStream = file.getInputStream(); // 避免文件覆盖 String originalFilename = file.getOriginalFilename(); String fileName = "file/" + LocalDate.now() + "/" + UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf(".")); //上传文件到 OSS OSS ossClient = new OSSClientBuilder().build(aliProperties.getEndpoint(), aliProperties.getAccessKeyId(), aliProperties.getAccessKeySecret()); threadPoolUtil.getTaskExecutor().execute(() -> { ossClient.putObject(aliProperties.getBucketName(), fileName, inputStream); ossClient.shutdown(); }); //文件访问路径 return aliProperties.getEndpoint().split("//")[0] + "//" + aliProperties.getBucketName() + "." + aliProperties.getEndpoint().split("//")[1] + "/" + fileName; } catch (IOException e) { throw new RuntimeException(e); } } }