springboot阿里云oss工具类

打印 上一主题 下一主题

主题 904|帖子 904|积分 2712

pom依赖;

yml配置:

读取配置文件类:

上传:

完整工具类代码:
点击查看代码
  1. `
  2. import cn.hutool.core.lang.UUID;
  3. import com.aliyun.oss.OSS;
  4. import com.aliyun.oss.OSSClientBuilder;
  5. import com.aliyun.oss.model.*;
  6. import com.luzhizheng.common.config.OSSConfig;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import java.io.*;
  11. import java.net.URL;
  12. import java.time.LocalDate;
  13. import java.time.format.DateTimeFormatter;
  14. import java.util.ArrayList;
  15. import java.util.Date;
  16. import java.util.List;
  17. import java.util.stream.Collectors;
  18. /**
  19. * @author Sappy
  20. * @date 4/6/2023 10:40:44
  21. */
  22. @Component
  23. public class AliYunOSSUtil {
  24.     @Autowired
  25.     private OSSConfig ossConfig;
  26.     private static String FOLDER = "文件夹";
  27.     /**
  28.      * 本地文件上传到oss
  29.      * @param file
  30.      * @return
  31.      * @throws FileNotFoundException
  32.      */
  33.     public String upload(File file) throws FileNotFoundException {
  34.         String absolutePath = file.getAbsolutePath();
  35.         String fileName = file.getName();
  36.         FileInputStream is = new FileInputStream(absolutePath);
  37.         ObjectMetadata metadata = new ObjectMetadata();
  38.         int indexOfLastDot = fileName.lastIndexOf(".");
  39.         String suffix = fileName.substring(indexOfLastDot);
  40.         metadata.setContentType(getContentType(suffix));
  41.         String uuid = UUID.randomUUID().toString().replaceAll("-", "");
  42.         fileName = uuid + suffix;
  43.         String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());
  44.         fileName = FOLDER + "/" + datePath + "/" + fileName;
  45.         PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfig.getBucket(), fileName, is);
  46.         //设置ContentType,预览
  47.         putObjectRequest.setMetadata(metadata);
  48.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  49.         ossClient.putObject(putObjectRequest);
  50. /*        //临时第三方授权
  51.         Date expiration = new Date(System.currentTimeMillis() + 3600000L  * 24);
  52.         URL url = ossClient.generatePresignedUrl(ossConfig.getBucket(), aimFilePathName, expiration);*/
  53.         String url = "https://" + ossConfig.getBucket() + "." + ossConfig.getEndpoint() + "/" + fileName;
  54.         // 关闭ossClient
  55.         ossClient.shutdown();
  56.         return url;
  57.     }
  58.     /**
  59.      * multipartFile上传到oss
  60.      * @param multipartFile
  61.      * @return
  62.      * @throws IOException
  63.      */
  64.     public String upload(MultipartFile multipartFile) throws IOException {
  65.         InputStream inputStream = multipartFile.getInputStream();
  66.         String fileName = multipartFile.getOriginalFilename();
  67.         String uuid = UUID.randomUUID().toString().replaceAll("-", "");
  68.         fileName = uuid + fileName;
  69.         String datePath = DateTimeFormatter.ISO_DATE.format(LocalDate.now());
  70.         // 拼接fileName , 文件夹1/文件夹2/文件名.jpg
  71.         fileName = FOLDER + "/" + datePath + "/" + fileName;
  72.         // 如果需要上传时设置存储类型与访问权限
  73.         ObjectMetadata metadata = new ObjectMetadata();
  74.         int indexOfLastDot = fileName.lastIndexOf(".");
  75.         String suffix = fileName.substring(indexOfLastDot);
  76.         metadata.setContentType(getContentType(suffix));
  77.         PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfig.getBucket(), fileName, inputStream);
  78.         //设置ContentType,预览
  79.         putObjectRequest.setMetadata(metadata);
  80.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  81.         ossClient.putObject(putObjectRequest);
  82.         /*        //临时第三方授权
  83.         Date expiration = new Date(System.currentTimeMillis() + 3600000L  * 24);
  84.         URL url = ossClient.generatePresignedUrl(ossConfig.getBucket(), aimFilePathName, expiration);*/
  85.         String url = "https://" + ossConfig.getBucket() + "." + ossConfig.getEndpoint() + "/" + fileName;
  86.         ossClient.shutdown();
  87.         return url;
  88.     }
  89.     private static String getContentType(String suffix) {
  90.         if (suffix.equalsIgnoreCase(".bmp")) {
  91.             return "image/bmp";
  92.         }
  93.         if (suffix.equalsIgnoreCase(".gif")) {
  94.             return "image/gif";
  95.         }
  96.         if (suffix.equalsIgnoreCase(".jpeg") ||
  97.             suffix.equalsIgnoreCase(".jpg") ||
  98.             suffix.equalsIgnoreCase(".png")
  99.         ) {
  100.             return "image/jpg";
  101.         }
  102.         return "image/jpg";
  103.     }
  104.     /**
  105.      * 列举 指定路径下所有的文件的文件名
  106.      * 如果要列出根路径下的所有文件,path= ""
  107.      *
  108.      * @param path
  109.      * @return
  110.      */
  111.     public List<String> listFileName(String path) {
  112.         // 构造ListObjectsRequest请求。
  113.         ListObjectsRequest listObjectsRequest = new ListObjectsRequest(ossConfig.getBucket());
  114.         // 设置prefix参数来获取path目录下的所有文件。
  115.         listObjectsRequest.setPrefix(path);
  116.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  117.         // 列出文件。
  118.         ObjectListing objectListing = ossClient.listObjects(listObjectsRequest);
  119.         List<OSSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
  120.         List<String> list = objectSummaries.stream().map(OSSObjectSummary::getKey).collect(Collectors.toList());
  121.         ossClient.shutdown();
  122.         return list;
  123.     }
  124.     /**
  125.      * 列举文件下所有的文件url信息
  126.      */
  127.     public List<String> listFileUrl(String path) {
  128.         List<String> res = new ArrayList<>();
  129.         // 构造ListObjectsRequest请求
  130.         ListObjectsRequest listObjectsRequest = new ListObjectsRequest(ossConfig.getBucket());
  131.         // 设置prefix参数来获取fun目录下的所有文件。
  132.         listObjectsRequest.setPrefix(path);
  133.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  134.         // 列出文件。
  135.         ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  136.         // 遍历所有文件。
  137.         for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  138.             //文件访问路径
  139.             Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);
  140.             URL url = ossClient.generatePresignedUrl(ossConfig.getBucket(), objectSummary.getKey(), expiration);
  141.             res.add(url.toString());
  142.         }
  143.         // 关闭OSSClient。
  144.         ossClient.shutdown();
  145.         return res;
  146.     }
  147.     /**
  148.      * 判断文件是否存在
  149.      *
  150.      * @param objectName
  151.      * @return
  152.      */
  153.     public boolean isFileExist(String objectName) {
  154.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  155.         return ossClient.doesObjectExist(ossConfig.getBucket(), objectName);
  156.     }
  157.     /**
  158.      * 通过文件名下载文件
  159.      *
  160.      * @param ossFileName    要下载的文件名
  161.      * @param localFileName 本地要创建的文件名
  162.      */
  163.     public void downloadFile(String ossFileName, String localFileName) {
  164.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  165.         // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
  166.         ossClient.getObject(new GetObjectRequest(ossConfig.getBucket(), ossFileName), new File(localFileName));
  167.         // 关闭OSSClient。
  168.         ossClient.shutdown();
  169.     }
  170.     /**
  171.      * 删除文件或目录
  172.      *
  173.      * @param objectName
  174.      */
  175.     public void deleteFile(String objectName) {
  176.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  177.         ossClient.deleteObject(ossConfig.getBucket(), objectName);
  178.         ossClient.shutdown();
  179.     }
  180.     /**
  181.      * 批量删除文件或目录
  182.      *
  183.      * @param keys
  184.      */
  185.     public void deleteFiles(List<String> keys) {
  186.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  187.         // 删除文件。
  188.         DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(ossConfig.getBucket()).withKeys(keys));
  189.         deleteObjectsResult.getDeletedObjects();
  190.         ossClient.shutdown();
  191.     }
  192.     /**
  193.      * 创建文件夹
  194.      *
  195.      * @param folder
  196.      * @return
  197.      */
  198.     public String createFolder(String folder) {
  199.         // 文件夹名
  200.         final String keySuffixWithSlash = folder;
  201.         OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
  202.         // 判断文件夹是否存在,不存在则创建
  203.         if (!ossClient.doesObjectExist(ossConfig.getBucket(), keySuffixWithSlash)) {
  204.             // 创建文件夹
  205.             ossClient.putObject(ossConfig.getBucket(), keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));
  206.             // 得到文件夹名
  207.             OSSObject object = ossClient.getObject(ossConfig.getBucket(), keySuffixWithSlash);
  208.             String fileDir = object.getKey();
  209.             ossClient.shutdown();
  210.             return fileDir;
  211.         }
  212.         return keySuffixWithSlash;
  213.     }
  214. }
复制代码
`````
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表